我正在尝试创建一个函数,该函数将在维基百科网站中创建新条目。到目前为止,我拥有的代码将进行输入(即,如果您通过表单来创建页面,它将显示在主屏幕上的页面列表中),但当您点击提交时,不会将您带到该页面,它向我显示 NoReverseMatch 错误。它说“找不到‘entry’的反向。‘entry’不是有效的视图函数或模式名称。”
我需要它做的就是重定向到新页面,但我不明白为什么它说条目不是有效的视图函数?我有一个名为条目的函数来保存以前的条目,但我在连接问题时遇到了问题。
观点.PY
def entry(request, title):
html_content = convert_md_to_html(title)
if html_content == None:
return render(request, "encyclopedia/error.html", {
"message": "This entry does not exist."
})
else:
return render(request, "encyclopedia/entry.html", {
"title": title,
"content": html_content
})
class AddPageForm(forms.Form):
title = forms.CharField()
content = forms.CharField(widget=forms.Textarea(
attrs={
"class": "form-control",
}))
def add_page(request):
form = AddPageForm() # <- called at GET request
if request.method == "POST":
form = AddPageForm(request.POST) # <- called at POST request
if form.is_valid():
title = form.cleaned_data['title']
content = form.cleaned_data['content']
entries = util.list_entries()
for entry in entries:
if title.upper() == entry.upper():
return render(request, "encyclopedia/error.html")
util.save_entry(title, content)
return redirect('entry', title=title)
else:
return render(request, "encyclopedia/addpage.html", {
"form": AddPageForm()
})
URLS.PY
app_name = "encyclopedia"
urlpatterns = [
path("", views.index, name="index"),
path("entry/<str:title>/", views.entry, name="entry"),
path("search/", views.search, name="search"),
path("add_page", views.add_page, name="addpage"),
path("edit_page/<str:title>", views.edit_page, name="editpage"),
path("random_page/", views.random_page, name="random"),
]
添加页面.HTML
{% extends "encyclopedia/layout.html" %}
{% block title %}
Encyclopedia
{% endblock %}
{% block body %}
<h1>New Page</h1>
<form action="{% url 'encyclopedia:addpage' %}" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="submit" class="btn btn-secondary">
</form>
{% endblock %}
实用程序.PY
def list_entries():
"""
Returns a list of all names of encyclopedia entries.
"""
_, filenames = default_storage.listdir("entries")
return list(sorted(re.sub(r"\.md$", "", filename)
for filename in filenames if filename.endswith(".md")))
您应该在添加页面功能中使用反向来进行重定向。
示例代码:
导入反向
从 django.urls 反向导入
使用反向网址重定向
返回重定向(反向('entry',kwargs = {'title':title}))
您可以在此处阅读更多有关反向的信息