我目前正在尝试使用Django生成sitemaps.xml。要做到这一点,我跟着Django documentation,但我有麻烦为以下类型的网址生成站点地图:
url(r'^duo/(?P<pseudo>[a-z]+)/$','clients.views.duo', name='duo')
我的 sitemaps.py 看起来像这样:
from django.contrib import sitemaps
from django.core.urlresolvers import reverse
from datetime import datetime
class SiteSitemap(sitemaps.Sitemap):
def __init__(self, names):
self.names = names
def items(self):
return self.names
def changefreq(self, obj):
return 'weekly'
def location(self, obj):
return reverse(obj)
以及 urls.py 中包含站点地图的部分:
sitemaps = {
'pages':SiteSitemap(['homepage',
'landing_page',
'mentions',
'no_anim',
]),
}
urlpatterns += [
url(r'^sitemap\.xml', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}),
]
当自己传递'duo'时,我有以下错误:
NoReverseMatch at /sitemap.xml
Reverse for 'duo' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['duo/(?P<pseudo>[a-z]+)/$']
当我尝试以这种方式传递参数时('duo','anna'),我有错误:
NoReverseMatch at /sitemap.xml
Reverse for '('duo', 'anna')' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
我遇到语法错误,这是相当逻辑的,因为reverse()不接受三个括号。但是,我不知道如何解决这个问题。有没有人对此有所了解?
答案 0 :(得分:1)
在这种情况下,使用reverse
的正确语法是:
reverse('duo', args=['anna'])
答案 1 :(得分:0)
将您的位置方法重新定义为以下内容:
def location(self, item):
return reverse('url_name', args=(arg,))
答案 2 :(得分:0)
使用之前的答案,我做了一小段代码,希望它对其他用户有任何帮助:
def location(self, obj):
if len(obj) == 1:
return reverse(obj[0])
else:
return reverse(obj[0],args=[obj[1]])
obj 是在 urls.py
中声明的元组对象