You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CS50项目1:Django两个带字符串参数路径触发NoReverseError如何解决

问题原因及修复方案

核心报错原因

触发NoReverseMatch的根本原因是模板渲染时没有传入title参数,导致模板调用{% url %}标签时传递的title为空字符串,无法匹配路由要求的非空字符串规则。

具体修复步骤

  1. 修复get_entry视图的上下文传参
    在views.get_entry函数中,两个render返回的上下文都需要补充title参数:
def get_entry(request, title):
    exists = util.get_entry(title)
    if exists is None:
            return render(request, "encyclopedia/get_entry.html", {
                "entry": "Entry Does Not Exist",
                "title": title  # 新增此行
            })
    else:
        entry = markdown(util.get_entry(title))
        return render(request, "encyclopedia/get_entry.html", {
            "entry": entry,
            "title": title  # 新增此行
             })
  1. 修复edit_entry视图的两处问题
  • GET请求渲染模板时补充title参数到上下文
  • 修正拼写错误HttpRespnseRedirect为HttpResponseRedirect,可直接用Django内置的redirect方法简化代码
from django.shortcuts import redirect

def edit_entry(request, title):
   if request.method == "POST":
       form = NewEditEntryForm(request.POST)
       if form.is_valid():
           title = form.cleaned_data["title"]
           content = form.cleaned_data["content"]
           util.save_entry(title, content)
           # 用reverse逻辑拼接路径,避免手动拼接出错
           return redirect("get_entry", title=title)
   else: 
       return render(request, "encyclopedia/edit_entry.html",{
           "form": NewEditEntryForm(),
           "title": title  # 新增此行
       })
  1. 修复edit_entry.html的模板语法错误
    模板中form标签多写了一个提前闭合的</form>,会导致表单内容不被识别,修正如下:
{% extends "encyclopedia/layout.html" %}

{% block title %}
    Edit Entry
{% endblock %}

{% block body %}
    <h1>Edit {{ title }}</h1>
    <!-- 移除原标签后多余的</form> -->
    <form action = "{% url 'edit_entry' title=title %}" method = "POST">
        {% csrf_token %}
        {{ form }}
        <input type = submit value = "Save">
    </form>
{% endblock %}
  1. 可选优化
    给create_entry路由末尾添加斜杠,和其他路由规则保持一致,避免Django的APPEND_SLASH重定向带来的潜在问题:
path("create_entry/", views.create_entry, name = "create_entry") 

内容的提问来源于stack exchange,提问作者skateb2020

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 11:57:01