【发布时间】: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视图接受titlekwarg。也许改变你的网址来接受?喜欢"edit/<str:title>"