在我为一个课程构建的Django应用程序中,我试图通过url路径将一个参数从一个模板传递到views.py中的一个函数。
urls.py中的路径定义包含参数名称,views.py中的函数也需要相同的名称。
我的模板中的链接指向正确的url路径并为参数命名了一个值,但我仍然收到一个NoReverseMatch错误。奇怪的是,我有另一个需要参数的URL路径,它工作得很好。
entry.html这里是urls.py中名为edit
的路径的链接。我想将变量entryTitle
的值作为entry
传递给url:
{% extends "encyclopedia/layout.html" %}
{% block title %}
{{ entryTitle }}
{% endblock %}
{% block body %}
{{ entry|safe }}
<button>
<a href="{% url 'edit' entry=entryTitle %}">Edit Entry</a>
</button>
{% endblock %}
字符串
urls.pyedit
路径是urlpatterns
中定义的最后一个路径
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
path("wiki/<str:entry>", views.entry, name="entry"),
path("search", views.search, name="search"),
path("new", views.new_page, name="new"),
path("wiki/edit/<str:entry>", views.edit, name="edit")
]
型
views.py这是编辑函数,需要entry
作为参数UPDATE:还示出了输入功能
class EditPageForm(forms.Form):
content = forms.CharField(
widget=forms.Textarea(),
label="Edit Content:")
def edit(request, entry):
if request.method == "POST":
#Edit file and redirect
form = EditPageForm(request.POST)
if form.is_valid():
content = form.cleaned_data["content"]
util.save_entry(entry, content)
return HttpResponseRedirect(reverse('entry', kwargs={'entry': entry}))
else:
#Load form with initial values filled
content = util.get_entry(entry)
form = EditPageForm(initial={"content": content})
return render(request, "encyclopedia/edit.html", {
"editform": form,
"entryTitle": entry
})
def entry(request, entry):
markdowner = Markdown()
entryPage = util.get_entry(entry)
if entryPage is None:
return render(request, "encyclopedia/notfound.html", {
"entryTitle": entry
})
else:
return render(request, "encyclopedia/entry.html", {
"entry": markdowner.convert(entryPage),
"entryTitle": entry
})
型
单击entry.html中的链接会出现以下错误:
NoReverseMatch at /wiki/edit/HTML
Reverse for 'edit' with no arguments not found. 1 pattern(s) tried: ['wiki/edit/(?P<entry>[^/]+)$']
型
如果我在服务器上的entry.html
上查看页面源代码,该链接似乎正确地呈现了路径,并显示了entryTitle
的正确值,我认为这意味着模板和urls.py
之间一定发生了一些通信,但当单击链接时找不到路径。
下面是entry.html的'view page source',entryTitle
包含的值为“HTML”:
<button>
<a href="/wiki/edit/HTML">Edit Entry</a>
</button>
型
有没有人看到我的代码有什么问题,或者有什么好的解决方法?我在这件事上纠结了几天。谢谢你的好意
UPDATE这里是edit.html模板:
{% extends "encyclopedia/layout.html" %}
{% block title %}
Edit Entry
{% endblock %}
{% block body %}
<h2>Edit encyclopedia entry for {{ entryTitle }}</h2>
<form action="{% url 'edit' %}" method="POST">
{% csrf_token %}
{{ editform }}
<input type="submit" value="Update">
</form>
{% endblock %}
型
1条答案
按热度按时间kr98yfug1#
您需要提供标题作为参数。
字符串