Django 1.6: /sitemap.xml 的 NoReverseMatch

0 投票
1 回答
890 浏览
提问于 2025-04-18 16:40

我正在尝试实现 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类的具体目的是什么?

撰写回答