Django:无法反转网址以生成网站地图

时间:2015-11-30 11:35:03

标签: python django sitemap

我目前正在尝试使用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()不接受三个括号。但是,我不知道如何解决这个问题。有没有人对此有所了解?

3 个答案:

答案 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

中声明的元组对象