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

中声明的元组对象