我有这个错误:
使用参数'('',)'和关键字参数反转'post_detail' '{}' 未找到。尝试了1种模式:['posts /(?P [0-9] +)/ $']
来自home.html
模板中的第7行:
<a href="{% url 'post_detail' post.id %}">{{ post.title }}</a>
<h1>Welcome to Jeremie's blog</h1>
<h2>Latest Posts</h2>
{% for posts in posts.all %}
<a href="{% url 'post_detail' post.id %}">{{ post.title }}</a>
<br />
{{ posts.pub_date_pretty }}
<br />
<img src = "{{ post.image.url }}" />
<br />
{{ posts.summary }}
<br />
<br />
{% endfor %}
{{ post.title }}
<br />
{{ posts.pub_date_pretty}}
<br />
<img src = "{{ post.image.url }}" />
<br />
{{posts.summary}}
<br />
<br />
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.home),
url(r'^posts/(?P<post_id>[0-9]+)/$', views.post_details, name="post_detail"),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
def home(request):
posts = Post.objects.order_by('pub_date')
return render(request, 'posts/home.html', {'posts':posts})
def post_details(request, post_id):
post = get_object_or_404(Post, pk=post_id)
return render(request, 'posts/posts_detail.html', {'post':post})
class Post(models.Model):
title = models.CharField(max_length=255)
pub_date = models.DateTimeField()
image = models.ImageField(upload_to='media')
body = models.TextField()
def __str__(self):
return self.title
def pub_date_pretty(self):
return self.pub_date.strftime('%b %e %Y')
def summary(self):
return self.body[:100]
似乎post.id
在模板中不可用。但是,它在views.py
中已明确定义。
任何人都可以告诉我如何解决这个问题?
答案 0 :(得分:0)
您的模板中似乎没有post.id
可用,可能是因为该帖子尚未创建。如果我不知道您的逻辑模式,我无法确切地告诉您为什么post.id
不存在,但您看到post.id
是错误消息中的空字符串:{{1其中参数是一个空字符串项的元组,即:Reverse for 'post_detail' with arguments '('',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['posts/(?P[0-9]+)/$']
。在引文中应该有ID,一个数字。
答案 1 :(得分:0)
您的home.html模板中的变量不是post
或posts
变量。选择一个 - post
更有意义 - 并坚持下去。
{% for post in posts.all %}
<a href="{% url 'post_detail' post.id %}">{{ post.title }}</a>
{{ post.pub_date_pretty }}
<img src = "{{ post.image.url }}" />
{{ post.summary }}
{% endfor %}
(另外,没有关联,但请注意使用br
标签是非常糟糕的做法。请使用适当的语义标记并使用CSS来管理元素之间的空间。)