Django:无法反转 URL 以生成站点地图
Django : cannot reverse URL to generate sitemaps
我目前正在尝试使用 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() 不接受三重括号。但是,我不知道如何解决这个问题。有人知道吗?
在这种情况下,使用 reverse
的正确语法是:
reverse('duo', args=['anna'])
将您的定位方法重新定义为以下内容:
def location(self, item):
return reverse('url_name', args=(arg,))
根据之前的回答,我做了这么一小段代码,希望对其他用户有帮助:
def location(self, obj):
if len(obj) == 1:
return reverse(obj[0])
else:
return reverse(obj[0],args=[obj[1]])
obj 是在 urls.py
中声明的元组对象
我目前正在尝试使用 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() 不接受三重括号。但是,我不知道如何解决这个问题。有人知道吗?
在这种情况下,使用 reverse
的正确语法是:
reverse('duo', args=['anna'])
将您的定位方法重新定义为以下内容:
def location(self, item):
return reverse('url_name', args=(arg,))
根据之前的回答,我做了这么一小段代码,希望对其他用户有帮助:
def location(self, obj):
if len(obj) == 1:
return reverse(obj[0])
else:
return reverse(obj[0],args=[obj[1]])
obj 是在 urls.py
中声明的元组对象