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.py
、settings.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')
]
收到此错误阻止我继续前进。遵循站点地图的标准设置并收到以下错误:
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.py
、settings.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')
]