Django模板调用{% url 'forum_post' %}无参数匹配报错如何解决?
报错原因
Reverse for 'forum_post' with no arguments not found. 1 pattern(s) tried: ['forumpost/(?P
[0-9]+)/$']
该报错核心原因是你配置的forum_post路由规则要求必须传入pk参数(对应会话ID),但你在base模板的导航链接调用{% url %}模板标签时没有传递任何参数,导致路由匹配失败。
解决方案
你的forumPostList视图作用是展示单个会话下的帖子列表,本身必须依赖具体的会话ID才能渲染内容,直接在全局导航栏写死该链接不符合业务逻辑,可按两种场景选择对应方案:
- 场景1:导航栏需要跳转到某个固定默认会话的帖子页
直接在{% url %}标签里传入指定的pk值即可,例如默认会话的pk为1,修改导航代码为:<li class="nav-item"> <a class="nav-link active" aria-current="page" href="{% url 'forum_post' pk=1 %}">forum_post</a> </li> - 场景2:导航栏需要作为论坛帖子功能的统一入口
新增无参数的会话列表视图、路由作为中转页,用户点击具体会话后再跳转到带pk的帖子列表页:- 新增会话列表视图:
def conversationList(request): conversations = Conversation.objects.all() return render(request, "account/conversation_list.html", {"conversations": conversations})- 新增对应无参数的路由,命名为
conversation_list - 把base模板的导航链接修改为指向会话列表页:
<li class="nav-item"> <a class="nav-link active" aria-current="page" href="{% url 'conversation_list' %}">论坛会话</a> </li>- 会话列表页中给每个会话添加跳转链接:
{% for conversation in conversations %} <a href="{% url 'forum_post' pk=conversation.pk %}">{{ conversation.title }}</a> {% endfor %}
关于Reverse函数的疑问
模板层的{% url %}标签本质就是Reverse函数的模板层封装,你不需要额外在Python代码中调用Reverse,只要按规则传递正确参数即可。只有在Python视图层需要生成该路径时,才需要调用reverse('forum_post', kwargs={'pk': 会话id})。
内容的提问来源于stack exchange,提问作者GIUSEPPE FONTANA
相关产品推荐
相关产品推荐

