我一直试图解决这个问题一段时间,但我觉得我不太了解这个框架,我自己也可以调试它。
基本上我创建了一个小博客风格的网站,我试图创建一个帖子列表,这些帖子可以链接到该页面以阅读帖子本身。
我的模板中有一个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})
如果需要更多信息,请告诉我,我会提供。 所有其他答案都说这个错误与命名空间有关,但是它与创建链接一起工作正常,所以我很难过。
提前致谢!
答案 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/$'
。