【发布时间】:2019-01-25 02:08:48
【问题描述】:
我正在创建一个简单的 django 1.9 应用程序,其中包含一个博客,并且我希望该站点具有由网站页面和博客文章条目组成的站点地图。到目前为止,我能够构建一个将静态页面生成为站点地图的站点地图但是博客帖子站点地图给了我一个错误'Post' object has no attribute 'get_absolute_url 这是我的代码。有人请告诉我哪里出错了。
sitemaps.py
from django.contrib import sitemaps
from django.contrib.sitemaps import Sitemap
from django.core.urlresolvers import reverse
from administration.models import Post
class StaticSitemap(sitemaps.Sitemap):
changefreq = "daily"
priority = 1.0
def items(self):
return ['administration:index', 'administration:about']
def location(self, item):
return reverse(item)
class PostSitemap(Sitemap):
changefreq = "daily"
priority = 0.5
def items(self):
return Post.objects.all()`
models.py
class Post(models.Model):
STATUS_CHOICES = (('draft', 'Draft'),('published', 'Published'),)
featured_image = models.ImageField(upload_to="Photos/posts/images", blank=True, null=True)
post_short_description = models.TextField(default="No description available")
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250, unique_for_date='publish')
category = models.ForeignKey(Category)
tag = models.ManyToManyField(Tag)
author = models.ForeignKey(User,related_name='blog_posts',on_delete=models.CASCADE)
body = RichTextField()
publish = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=10, choices=STATUS_CHOICES,default='draft')
class Meta:
ordering = ('-publish',)
def __str__(self):
return self.title
urls.py
from django.conf.urls import include, url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.sitemaps.views import sitemap
from administration.sitemaps import PostSitemap, StaticSitemap
sitemaps = {
'post':PostSitemap,'static':StaticSitemap
}
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('administration.urls')),
url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps},
name='django.contrib.sitemaps.views.sitemap'),
url(r'^robots\.txt', include('robots.urls')),
url(r'^', include('cms.urls'))
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
【问题讨论】: