parent
0cbc2a0bc3
commit
c467375bec
|
@ -111,6 +111,8 @@ class Folder(dict):
|
|||
|
||||
def walk(self):
|
||||
for name, item in self.items():
|
||||
if name == 'index':
|
||||
name = ''
|
||||
yield name, item
|
||||
if isinstance(item, Folder):
|
||||
for subname, subitem in item.walk():
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
{%- for item in request.root.structure() %}{% if item != '/sitemap.xml' and item not in data.ignore %}
|
||||
{%- for item in pages %}
|
||||
<url>
|
||||
<loc>{{data.base_url}}{{item}}</loc>
|
||||
<loc>{{data.base_url}}/{{item}}</loc>
|
||||
</url>
|
||||
{%- endif %}{%- endfor %}
|
||||
{%- endfor %}
|
||||
</urlset>
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import re
|
||||
import yaml
|
||||
from pyramid.renderers import render_to_response
|
||||
from pyramid.path import AssetResolver
|
||||
|
@ -6,7 +7,7 @@ from flatfilecms.models import LoaderFactory
|
|||
from pyramid.httpexceptions import HTTPFound
|
||||
from pyramid.traversal import (find_root, find_resource)
|
||||
|
||||
from flatfilecms.models import (YAML, Markdown)
|
||||
from flatfilecms.models import (Folder, YAML, Markdown)
|
||||
|
||||
|
||||
def redirect(self, url):
|
||||
|
@ -42,3 +43,20 @@ def blog(self, options={}):
|
|||
post,
|
||||
request=self.request,
|
||||
response=self.request.response)
|
||||
|
||||
|
||||
def sitemap(self, options={}):
|
||||
ignore = [re.compile(i) for i in options.get('ignore', [])]
|
||||
root = find_root(self.context)
|
||||
post = self.context.page.copy()
|
||||
post['pages'] = []
|
||||
for name, item in root.walk():
|
||||
if not isinstance(item, Folder) and name != 'sitemap.xml' and not next(
|
||||
(True for r in ignore if r.match(name)), False):
|
||||
post['pages'].append(name)
|
||||
set_content_type(self, 'text/xml')
|
||||
return render_to_response(
|
||||
'{0}.jinja2'.format(post.get('template', 'sitemap')),
|
||||
post,
|
||||
request=self.request,
|
||||
response=self.request.response)
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
view:
|
||||
flatfilecms.views.sitemap:
|
||||
ignore:
|
||||
- blog/.*$
|
||||
data:
|
||||
base_url: https://flatfilecms.test
|
|
@ -70,3 +70,24 @@ def test_blogindex(pages, fake_request, config):
|
|||
fake_view_object = PagesView(pages['blog']['index'], fake_request)
|
||||
response = blog(fake_view_object, {'base': '/blog'})
|
||||
assert response.text == '/blog/blogpost2 /blog/blogpost1 '
|
||||
|
||||
|
||||
def test_sitemap(pages, fake_request, config):
|
||||
from flatfilecms.views.pages import PagesView
|
||||
response = PagesView(pages['sitemap.xml'], fake_request).process_yaml()
|
||||
assert response.text == """<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://flatfilecms.test/</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://flatfilecms.test/view</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://flatfilecms.test/views</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://flatfilecms.test/view-with-options</loc>
|
||||
</url>
|
||||
</urlset>"""
|
||||
assert response.content_type == 'text/xml'
|
||||
|
|
Reference in New Issue