很抱歉,我正在尝试用一些静态页面为一个基本的django博客应用程序生成sitemap.xml。我不知道为什么会发生这个错误。注意:我已经创建了一个虚拟博客文章,当我收到错误时它就存在了。
我试着查看django文档,但发现它太混乱了。在线教程也没有多大帮助。
**Error:**
NoReverseMatch at /sitemap.xml
Reverse for 'post_detail' with no arguments not found. 1 pattern(s) tried:
['post/(?P<pk>\\d+)$']
**sitemap.py**
from django.contrib.sitemaps import Sitemap
from blog.models import Post
from blog.urls import urlpatterns as homeUrls
from django.core.urlresolvers import reverse
class PostSitemap(Sitemap):
changefreq = "weekly"
priority = 0.5
def items(self):
return Post.objects.all()
class StaticSitemap(Sitemap):
priority = 0.8
changefreq = 'weekly'
# The below method returns all urls defined in urls.py file
def items(self):
mylist = [ ]
for url in homeUrls:
if url.name is None:
pass;
else:
mylist.append(''+str(url.name))
return mylist
def location(self, item):
return reverse(item)
**models.py**
class Post(models.Model):
author = models.ForeignKey('auth.User')
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
def get_absolute_url(self):
return reverse("post_detail",kwargs={'pk':self.pk})
**urls.py**
...
from django.contrib.sitemaps.views import sitemap
from .sitemaps import *
sitemaps = {
'posts': PostSitemap(),
'static': StaticSitemap(),
}
urlpatterns = [
...
url(r'^sitemap\.xml$', sitemap, {'sitemaps':
sitemaps},name='django.contrib.sitemaps.views.sitemap'),
url(r'^post/(?P<pk>\d+)$', views.PostDetailView.as_view(),
name='post_detail'),
...
]
**settings.py**
INSTALLED_APPS - [
...
'django.contrib.sitemaps',
'django.contrib.sites',
'robots',
...
]
I am very curious to understand how I can solve this error.
Thanks a lot !Edit1;添加在url中,用于postdetail。
发布于 2022-06-24 20:48:20
来自@Alasdair的评论部分的回答很有帮助:
你打电话的方式
reverse(item) isn't going to work for URL patterns that have arguments. 你不能简单的打电话
reverse('post_detail'), 你需要一个主键。
reverse('post_detail', args=[5]).https://stackoverflow.com/questions/47695237
复制相似问题