位于/sitemap.xml的Django SItemap索引NoReverseMatch

时间:2016-06-14 05:54:59

标签: python django

我尝试实施Sitemap索引,但我在sitemap.xml上收到以下错误。 sitemap-posts.xml和sitemap-categories.xml工作正常。

错误

NoReverseMatch at /sitemap.xml

Reverse for 'django.contrib.sitemaps.views.sitemap' with arguments '()' and keyword arguments '{'section': 'categories'}' not found. 0 pattern(s) tried: []

sitemap.py

from django.contrib.sitemaps import Sitemap

from .models import Post, Category

class PostSitemap(Sitemap):
    changefreq = 'daily'
    priority = 0.5

    def items(self):
        return Post.objects.published()

    def lastmod(self, obj):
        return obj.mod_date

class CategorySitemap(Sitemap):
    changefreq = 'daily'
    priority = 0.5

    def items(self):
        return Category.objects.all()

    def lastmod(self, obj):
        return obj.created_date

urls.py

from django.conf.urls import url
from django.contrib.sitemaps import views as sitemap

from . import views
from .sitemaps import PostSitemap, CategorySitemap

sitemaps = {
    'posts': PostSitemap,
    'categories': CategorySitemap,
}

urlpatterns = [
    url(r'^sitemap\.xml$', sitemap.index, { 'sitemaps': sitemaps }, 
        name='app1-sitemap'),
    url(r'^sitemap-(?P<section>.+)\.xml$', sitemap.sitemap, { 'sitemaps': sitemaps }, 
        name='django.contrib.sitemaps.views.sitemap1'),
]

请帮我解决此错误。

2 个答案:

答案 0 :(得分:1)

从&#39; django.contrib.sitemaps.views.sitemap1&#39;更改名称到#sitemaps&#39;。显然它使用该名称进行解析。

name='django.contrib.sitemaps.views.sitemap1'

我的网址看起来完全像这样,工作正常,当我更改名称时,我的错误接近你的。

from django.contrib.sitemaps.views import sitemap, index
    urlpatterns += [
            url(r'^sitemap\.xml$', cache_page(86400)(index), {'sitemaps': sitemaps, 'sitemap_url_name': 'sitemaps'}),
            url(r'^sitemap-(?P<section>.+)\.xml$', cache_page(86400)(sitemap), {'sitemaps': sitemaps}, name='sitemaps' )
        ]

需要sitemap_url_name,因为我正在缓存。

答案 1 :(得分:0)

我找到了第二个URL conf的名称。应该是

name='django.contrib.sitemaps.views.sitemap' 

指官方文件 https://docs.djangoproject.com/en/1.11/ref/contrib/sitemaps/#creating-a-sitemap-index

而不是你使用的

name='django.contrib.sitemaps.views.sitemap1'

它可以在我的电脑上运行。