Django 站点地图:'module' 对象没有属性 'get_urls'

Django sitemap : 'module' object has no attribute 'get_urls'

收到此错误阻止我继续前进。遵循站点地图的标准设置并收到以下错误:

AttributeError at /sitemap.xml

'module' object has no attribute 'get_urls'

我的urls.py:

from django.conf.urls import url, include
from django.contrib import admin
from django.contrib.sitemaps.views import sitemap
import blog.views  as PostSiteMap
sitemaps ={
    'post' : PostSiteMap
}
urlpatterns = [

    url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps},
    name='django.contrib.sitemaps.views.sitemap')
]

views.py:

class PostsSiteMap(Sitemap):
    changefreq = "daily"
    priority = 1.0
    def items(self):
        return Post.objects.all()

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

    def location(self, item):
        return reverse(item)

Post models.py:

class Post(models.Model):
title = models.CharField(max_length = 140)
body = RichTextUploadingField()
date = models.DateTimeField()
tags = models.ManyToManyField('Tags')
thumbnail = models.ImageField(upload_to="images/", null = False , default='images/place.png', blank = True, width_field="width_field",
        height_field="height_field")
height_field = models.IntegerField(default = 0, null = True, blank = True)
width_field = models.IntegerField(default = 0, null = True, blank = True)

def __str__(self):
    return self.title

def recent_posts(self):
    d = datetime.utcnow().replace(tzinfo=pytz.UTC) - timedelta(days=30)
    if self.date > d:
        return True
    else:
        return False

def get_absolute_url(self):
    return "/blog/%i/" % self.pk

有人知道为什么吗?谢谢!

你得到的错误应该是你在 sitemaps 字典内部传递的事实,模块 PostSiteMap 本身而不是实际的 PostsSiteMap class (位于 PostSiteMap 模块内)。

首先,您的站点地图应该保存在一个名为 sitemap.py 的单独文件中(这只是一个约定和一个好的做法)。此文件应与 wsgi.pysettings.py 等处于同一级别,因为它涉及整个项目的站点地图(这就是它被称为站点地图的原因!)。

在您的 views.py(定义 PostsSiteMap class)中,您应该纠正如下内容:

# blog/views.py

class PostsSiteMap(Sitemap):
    # your code as is

# This dictionary outside the class definition
SITEMAPS = {
    'post': PostsSiteMap,
}

现在,在你的 urls.py 中写下这些:

# urls.py

from django.conf.urls import url, include
....
from blog.views import SITEMAPS

urlpatterns = [
    url(r'^sitemap\.xml$', sitemap, {'sitemaps': SITEMAPS}, name='django.contrib.sitemaps.views.sitemap')
]