首页 > 解决方案 > 重定向错误 - NoReverseMatch:使用关键字参数'{'title':'Python'}'反转'edit'

问题描述

我正在开发一个允许用户创建、显示和编辑条目的应用程序。现在我正在研究编辑功能。我想要做的是有一个编辑按钮(实际上是一个通过隐藏输入发送数据的表单),它将条目的标题发送到一个名为 trans 的视图,其唯一目的是重定向到编辑视图,我这样做的原因这样当我在编辑视图上工作时,我可以简化流程,如果请求方法是 GET,它会显示带有表单的页面,用户可以在其中编辑条目,如果它是发布的,则编辑视图可以接收更改并保存它们,而不必担心从条目页面重定向。

问题在于每次单击编辑按钮时都会出现错误:

NoReverseMatch at /wiki/trans
Reverse for 'edit' with keyword arguments '{'title': 'Python'}' not found.

我一遍又一遍地检查了 urls.py 中的任何拼写错误或问题或命名方面的任何问题,但我就是找不到错误。这很令人沮丧,因为我认为这将是项目中最简单的部分。

下面是相关代码。我将非常感谢任何指出我做错了什么的人。先感谢您。

HTML

<div id="edit">
    <form action="{% url 'wiki:trans' %}" method="POST">
        {% csrf_token %}
        <input type=hidden value={{title}} name="title">
        <input type=submit value="Edit">
    </form>
</div>

视图.py

class EntryForm(forms.Form):
    title = forms.CharField(label="Title")
    content = forms.CharField(widget=forms.Textarea)

def trans(request):
    title = request.POST.get("title")
    return redirect("wiki:edit", title=title)

def edit(request, title):
    if request.method == "GET":
        entry = util.get_entry(title)

        return render(request, "encyclopedia/edit.html", {
            "form": EntryForm({
                "content": entry,
                "title": title
            })
        })
    else:
        form = EntryForm(request.POST)

        if form.is_valid():
            title = form.cleaned_data["title"]
            content = form.cleaned_data["content"]

        util.save_entry(title, content)
        return redirect("wiki:title", title=title)

网址.py

app_name = "wiki"
urlpatterns = [
    path("", views.index, name="index"),
    path("search", views.search, name="search"),
    path("new", views.new, name="new"),
    path("trans", views.trans, name="trans"),
    path("edit", views.edit, name="edit"),
    path("random", views.rand, name="random"),
    path("<str:title>", views.title, name="title")
]

标签: pythondjangoredirect

解决方案


尝试/在每个网址的末尾添加一个,如下所示:

urls.py

app_name = "wiki"
urlpatterns = [
    path("", views.index, name="index"),
    path("search/", views.search, name="search"),
    path("new/", views.new, name="new"),
    path("trans/", views.trans, name="trans"),
    path("edit/", views.edit, name="edit"),
    path("random/", views.rand, name="random"),
    path("<str:title>/", views.title, name="title")
]

还可以尝试使用 reverse 并将标题作为 arg 传递给您views.py

    return redirect(reverse('wiki:title', args=[title]))

推荐阅读