使用参数'('',)'和关键字参数'{}'找不到'post_detail'的反转。尝试过1种模式:['posts /(?P [0-9] +)/ $']

时间:2017-01-22 17:34:42

标签: python django

我有这个错误:

  

使用参数'('',)'和关键字参数反转'post_detail'   '{}' 未找到。尝试了1种模式:['posts /(?P [0-9] +)/ $']

来自home.html模板中的第7行:

<a href="{% url 'post_detail' post.id %}">{{ post.title }}</a>

来自home.html

<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 %}

来自posts_details.html

{{ post.title }}
<br />
{{ posts.pub_date_pretty}}
<br />
<img src = "{{ post.image.url }}" />
<br />
{{posts.summary}}
<br />
<br />

来自urls.py

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)

来自views.py

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})

来自models.py

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中已明确定义。

任何人都可以告诉我如何解决这个问题?

2 个答案:

答案 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模板中的变量不是postposts变量。选择一个 - 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来管理元素之间的空间。)