Django 1.6: /sitemap.xml 的 NoReverseMatch
我正在尝试实现 Django 的网站地图功能,但遇到了以下错误。我不知道自己哪里做错了。这里是相关的代码和错误信息。
File "mysite/sitemap.py" in location
20. return reverse(obj)
File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py" in reverse
532. return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py" in _reverse_with_prefix
452. (lookup_view_s, args, kwargs, len(patterns), patterns))
Exception Type: NoReverseMatch at /sitemap.xml
Exception Value: Reverse for 'name_of_url' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
这是 sitemap.py 文件
from django.contrib.sitemaps import Sitemap
from django.core.urlresolvers import reverse
from meddy1.models import Doctor
import datetime
class Sitemap(Sitemap):
def __init__(self, names):
self.names = names
def items(self):
return self.names
def changefreq(self, obj):
return 'weekly'
def lastmod(self, obj):
return datetime.datetime.now()
def location(self, obj):
return reverse(obj)
class DoctorSitemap(Sitemap):
changefreq = "Daily"
priority = 1
def items(self):
return Doctor.objects.all()
def lastmod(self, obj):
return obj.date
这是 urls.py 文件
url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}),
1 个回答
0
如果你仔细阅读文档:
https://docs.djangoproject.com/en/1.6/ref/contrib/sitemaps/#django.contrib.sitemaps.Sitemap.location
你会发现,Django会为每个Sitemap对象调用get_absolute_url(除非你已经指定了位置)。你可以用reverse(obj)
来定义位置,这个指向的到底是什么呢?你的reverse应该指向一个有效的已注册的URL。此外,你在哪里看到过位置会接收一个参数?位置要么是一个属性,要么是一个方法,它返回一个路径(不需要参数)。
你的错误并不是和sitemaps有关,而是和你注册的sitemap模型中的URL解析有关。
最后,你定义的Sitemap类的具体目的是什么?