【问题标题】:Keep getting NoReverseMatch error in Django project在 Django 项目中不断收到 NoReverseMatch 错误
【发布时间】:2020-11-29 16:43:41
【问题描述】:

我正在尝试为此表单执行更新功能。模板页面正确显示,但一旦我点击提交按钮,我不断收到 NoReverseMatch 错误:Reverse for 'update_page' with keyword arguments '{'title': ''}'强> 未找到。尝试了 1 种模式:['wiki/(?P[^/]+)/update$'] 根据分配,该项目没有模型。 db 基本上是同一目录中的一个文件夹。此文件夹中的文件通过 util.py 中的 list_entries()、save_entry() 和 get_entry() 函数进行管理。

网址:

app_name = "entries"
urlpatterns = [
    path("", views.index, name="index"),
    path("newpage", views.newpage, name="newpage"),
    path("<str:title>", views.open_page, name="open_page"),
    path("search/", views.search, name="search_query"),
    path("<str:title>/update", views.update_page, name="update_page"),
    path("random/", views.random_page, name="random_page"),
    path("<str:title>/deleted", views.del_page, name="del_page")

]

我的观点代码:

def update_page(request, title):
entered_content = util.get_entry(title)
form_dict = {'form_title': title, 'form_content': entered_content}

if request.method == "POST":
    form = NewPageForm(request.POST or None, initial=form_dict)
    
    if form.is_valid():
        
        title = form.cleaned_data[title]
        updated_content = form.cleaned_data['form_content']
        util.save_entry(title, updated_content)
        return HttpResponseRedirect(reverse("entries:open_page", args=(title), ))
    else: 
        return render(request, "encyclopedia/updatepage.html", {
            "form": form
        })

return render(request, "encyclopedia/updatepage.html", {
    "form": NewPageForm(request.POST or None, initial=form_dict),
    "titles": title,        
})           

模板:

{% block body %}

<h2>Update the {{titles}} entry:</h2>

<form action="{% url 'entries:update_page' title=titles %}" method="post">
    
    {% csrf_token %}    
    {{ form.form_content}}
    <input type="submit" value="Update">
</form>

<form method="GET" action="{% url 'entries:del_page' title=titles %}" >
<button type = "submit" >Delete Entry</button>
</form>

<a href = "{% url 'entries:index' %}">View Entries</a>

{% endblock %}

【问题讨论】:

  • titles 变量未在上下文中设置,也未在模板中呈现,因此出现错误

标签: python django django-views django-templates django-urls


【解决方案1】:

您能否尝试从路径中删除 str,因为 str 根据Django docs,匹配任何非空字符串,不包括路径分隔符“/”。如果表达式中不包含转换器,则这是默认设置。

app_name = "entries"
urlpatterns = [
    path("", views.index, name="index"),
    path("newpage", views.newpage, name="newpage"),
    path("title/", views.open_page, name="open_page"),
    path("search/", views.search, name="search_query"),
    path("title/update", views.update_page, name="update_page"),
    path("random/", views.random_page, name="random_page"),
    path("title/deleted", views.del_page, name="del_page")

]

【讨论】:

  • 谢谢@Hridyesh,但它没有用。我收到此错误:找不到页面 (404) 请求方法:POST 请求 URL:127.0.0.1:8000/wiki/Test%202/update 使用 wiki.urls 中定义的 URLconf,Django 按以下顺序尝试了这些 URL 模式:当前路径,wiki/Test 2/更新,与这些都不匹配。顺便说一句,<..>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
  • 2021-05-24
  • 2015-10-24
  • 2017-08-05
相关资源
最近更新 更多