有没有办法动态生成站点地图并定期使用金字塔将其提交给Google?
我在Flask中看到了2个代码段(here和here),但它们似乎不适用于Pyramid。
具体来说,当我在config.add_route('sitemap', '/sitemap.xml')
中加入__init__.py
,然后是以下视图时:
@view_config(route_name='sitemap', renderer='static/sitemap.xml')
def sitemap(request):
ingredients = [ ingredient.name for ingredient in Cosmeceutical.get_all() ]
products = [ product.name for product in Product.get_all() ]
return dict(ingredients=ingredients, products=products)
我收到错误:
File "/home/home/SkinResearch/env/local/lib/python2.7/site-packages/pyramid-1.4.5- py2.7.egg/pyramid/registry.py", line 148, in _get_intrs_by_pairs
raise KeyError((category_name, discriminator))
KeyError: ('renderer factories', '.xml')
将视图更改为:
@view_config(route_name='sitemap', renderer='static/sitemap.xml.jinja2')
def sitemap(request):
ingredients = [ ingredient.name for ingredient in Cosmeceutical.get_all() ]
products = [ product.name for product in Product.get_all() ]
request.response.content_type = 'text/xml'
return dict(ingredients=ingredients, products=products)
从以前获取过去的KeyError,但在我尝试导航到mysite.com/static/sitemap.xml.
时给了我404这是怎么回事?
编辑:这是我的sitemap.jinja2文件。
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
{% for page in other_pages %}
<url>
<loc>http://www.wisderm.com/{{page}}</loc>
<changefreq>weekly</changefreq>
</url>
{% endfor %}
{% for ingredient in ingredients %}
<url>
<loc>http://www.wisderm.com/ingredients/{{ingredient.replace(' ', '+')}}</loc>
<changefreq>monthly</changefreq>
</url>
{% endfor %}
{% for product in products %}
<url>
<loc>http://www.wisderm.com/products/{{product.replace(' ', '+')}}</loc>
<changefreq>monthly</changefreq>
</url>
{% endfor %}
</urlset>
答案 0 :(得分:1)
鉴于您希望建立http://example.com/sitemap.xml作为您的站点地图网址。
将此行添加到 init .py以将网址格式http://example.com/sitemap.xml注册为路由sitemap
config.add_route('sitemap', '/sitemap.xml')
注册路由sitemap
的视图代码,并使用您的自定义jinja2模板sitemap.jinja2
呈现响应。文件扩展名“jinja2”将触发jinja2渲染器的使用。
@view_config(route_name='sitemap', renderer='static/sitemap.jinja2')
def sitemap(request):
ingredients = [ ingredient.name for ingredient in Cosmeceutical.get_all() ]
products = [ product.name for product in Product.get_all() ]
return dict(ingredients=ingredients, products=products)
这样可以解决因尝试为网址命名模板而导致的错误。但这混淆了渲染器惯例如下所示。
现在,您仍然需要根据sitemaps protocol创建XML。但是你的代码很有前景。您将资源树传递给XML模板。每个资源通常都可以访问URL或last_changed之类的属性。
答案 1 :(得分:0)
看看here
from pyramid.threadlocal import get_current_registry
def mview(request):
reg = get_current_registy
当我查看来源时,get_routes_mapper
中有方法pyramid.config.Configurator
。
也许它可以帮助您在'fly'上生成站点地图:)