【问题标题】:redirect errot - NoReverseMatch: Reverse for 'edit' with keyword arguments '{'title': 'Python'}' not found重定向错误-NoReverseMatch:使用关键字参数'{'title':'Python'}'反转'edit'
【发布时间】:2021-09-28 10:18:10
【问题描述】:

我正在开发一个允许用户创建、显示和编辑条目的应用程序。现在我正在研究编辑功能。我想要做的是有一个编辑按钮(实际上是一个通过隐藏输入发送数据的表单),它将条目的标题发送到一个名为 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>

views.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)

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")
]

【问题讨论】:

  • 你的根urls.py 是什么样子的?
  • 这是由这一行引起的:return redirect("wiki:edit", title=title)trans 视图中。您正在为 wiki:edit 传递一个标题 kwarg,但在您的 urls.py 中,它不希望收到任何 kwargs
  • 该应用程序称为百科全书,因此路径位于名为 urlpatterns 的列表中。 path('wiki/', include("encyclopedia.urls))
  • 项目中只有一个应用程序(这个),其他视图功能工作正常。根 urls.py 有何相关性?
  • 刚刚注意到您的edit 视图接受title kwarg。也许改变你的网址来接受?喜欢"edit/&lt;str:title&gt;"

标签: python django redirect


【解决方案1】:

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

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 并将标题作为参数传递给您的 views.py

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-15
    • 2017-10-01
    • 2016-05-01
    • 1970-01-01
    • 2016-11-11
    • 2013-12-22
    • 2013-07-25
    • 2018-09-08
    相关资源
    最近更新 更多