Django中的NoReverseMatch [新手]

时间:2017-05-07 13:55:35

标签: python django url

我一直试图解决这个问题一段时间,但我觉得我不太了解这个框架,我自己也可以调试它。

基本上我创建了一个小博客风格的网站,我试图创建一个帖子列表,这些帖子可以链接到该页面以阅读帖子本身。

我的模板中有一个for循环:

模板/ home.py

<h1>Home Page</h1>
<p>welcome to the ven home page, {{ username }}!</p>

<a href="{% url 'users:logout' %}">Click here to log out</a>
<br>
<a href="{% url 'posts:create' %}">Click here to create a post</a>

<h2>Posts:</h2>

{% for post in posts %}
  <div>
    <hr>
    <a href="{% url 'posts:show' id=post.id %}"><h4>{{post.title}}</h4></a>
    <p>{{post.body}}</p>
    <p><i>{{post.tags}}</i></p>
  </div>
{% endfor%}

导致问题的行<a href="{% url 'posts:show' id=post.id %}"><h4>{{post.title}}</h4></a>。我收到了错误

Reverse for 'show' with keyword arguments '{'id': 1}' not found. 1 
pattern(s) tried: ['posts/(?P<post_id>\\d+)/view/$']

这是我的网址文件

url(r'^$', views.CreateFormView.as_view(), name='create'),
url(r'^(?P<post_id>\d+)/view/$', views.show_post, name='show')

创建方法链接正常

以下是加载模板的视图:

def home(request):
    if not request.user.is_authenticated:
        return redirect('users:login')

    posts = Post.objects.all()
    username = request.user.username
    return render(request, 'ven/home.html', {'username': username, 'posts': 
    posts})

如果需要更多信息,请告诉我,我会提供。 所有其他答案都说这个错误与命名空间有关,但是它与创建链接一起工作正常,所以我很难过。

提前致谢!

1 个答案:

答案 0 :(得分:0)

参数名称不匹配。

您想要更改
<a href="{% url 'posts:show' id=post.id %}"><h4>{{post.title}}</h4></a>


<a href="{% url 'posts:show' post_id=post.id %}"><h4>{{post.title}}</h4></a>

因为在urls.py中,show网址被定义为'^(?P<post_id>\d+)/view/$'