对 'entrypage' 进行反转,没有未找到的参数。尝试了 1 种模式:['wiki/(?P<title>[^/]+)$']
Reverse for 'entrypage' with no arguments not found. 1 pattern(s) tried: ['wiki/(?P<title>[^/]+)$']
VIEWS.PY
from django.shortcuts import render
from django.shortcuts import redirect
from django.urls import reverse
from django.http import HttpResponseRedirect
from django import forms
import markdown2
from . import util
class AddPageForm(forms.Form):
title = forms.CharField(max_length=20)
content = forms.CharField(widget=forms.Textarea(
attrs={
"class": "form-control",
"placeholder": "Tell us more!"
})
)
def add_page(request):
if request.method == "POST":
form = AddPageForm(request.POST)
entries = util.list_entries()
if form.is_valid():
title = form.cleaned_data['title']
content = form.cleaned_data['content']
util.save_entry(title, content)
for entry in entries:
if title.upper() == entry.upper():
return render(request, "encyclopedia/errorpage.html")
else:
return HttpResponseRedirect(reverse('encyclopedia:entrypage'))
else:
return render(request, "encyclopedia/addpage.html", {
"form": AddPageForm()
})
URLS.PY
app_name = "encyclopedia"
urlpatterns = [
path("", views.index, name="index"),
path("wiki/<str:title>", views.entry_page, name="entrypage"),
path("search", views.search, name="search"),
path("add_page", views.add_page, name="addpage"),
]
ADDPAGE.HTML
<form action="{% url 'encyclopedia:addpage' %}" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit" class="btn btn-secondary">
</form>
LAYOUT.HTML
<div>
<a href="{% url 'encyclopedia:addpage' %}">Create New Page</a>
</div>
<div>
我已经尝试更新 url 和对此的视图,但我不断收到错误响应
path("add_page/<str:title>", views.add_page, name="addpage"),
def add_page(request, title):
请告知此错误响应可能来自何处,因为上述编辑是我在其他一些用于清除错误的 Whosebug 响应中看到的,但这对我不起作用。
谢谢
当您重定向到 entrypage
时,您需要指定标题,因此:
from django.shortcuts import <strong>redirect</strong>
def add_page(request):
if request.method == "POST":
form = AddPageForm(request.POST)
entries = util.list_entries()
if form.is_valid():
title = form.cleaned_data['title']
content = form.cleaned_data['content']
util.save_entry(title, content)
for entry in entries:
if title.upper() == entry.upper():
return render(request, "encyclopedia/errorpage.html")
# specify title ↓
return redirect('encyclopedia:entrypage'<strong>, title=title</strong>)
# …
我还强烈建议使用数据库,并且不要从实用程序中获取所有条目:数据库经过优化以有效搜索,而访问文件列表需要线性时间来搜索。如果您定义了一个数据库模型,您可以添加 db_index=True
[Django-doc] 来构建一个可以极大地提高搜索速度的索引。
VIEWS.PY
from django.shortcuts import render
from django.shortcuts import redirect
from django.urls import reverse
from django.http import HttpResponseRedirect
from django import forms
import markdown2
from . import util
class AddPageForm(forms.Form):
title = forms.CharField(max_length=20)
content = forms.CharField(widget=forms.Textarea(
attrs={
"class": "form-control",
"placeholder": "Tell us more!"
})
)
def add_page(request):
if request.method == "POST":
form = AddPageForm(request.POST)
entries = util.list_entries()
if form.is_valid():
title = form.cleaned_data['title']
content = form.cleaned_data['content']
util.save_entry(title, content)
for entry in entries:
if title.upper() == entry.upper():
return render(request, "encyclopedia/errorpage.html")
else:
return HttpResponseRedirect(reverse('encyclopedia:entrypage'))
else:
return render(request, "encyclopedia/addpage.html", {
"form": AddPageForm()
})
URLS.PY
app_name = "encyclopedia"
urlpatterns = [
path("", views.index, name="index"),
path("wiki/<str:title>", views.entry_page, name="entrypage"),
path("search", views.search, name="search"),
path("add_page", views.add_page, name="addpage"),
]
ADDPAGE.HTML
<form action="{% url 'encyclopedia:addpage' %}" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit" class="btn btn-secondary">
</form>
LAYOUT.HTML
<div>
<a href="{% url 'encyclopedia:addpage' %}">Create New Page</a>
</div>
<div>
我已经尝试更新 url 和对此的视图,但我不断收到错误响应
path("add_page/<str:title>", views.add_page, name="addpage"),
def add_page(request, title):
请告知此错误响应可能来自何处,因为上述编辑是我在其他一些用于清除错误的 Whosebug 响应中看到的,但这对我不起作用。
谢谢
当您重定向到 entrypage
时,您需要指定标题,因此:
from django.shortcuts import <strong>redirect</strong>
def add_page(request):
if request.method == "POST":
form = AddPageForm(request.POST)
entries = util.list_entries()
if form.is_valid():
title = form.cleaned_data['title']
content = form.cleaned_data['content']
util.save_entry(title, content)
for entry in entries:
if title.upper() == entry.upper():
return render(request, "encyclopedia/errorpage.html")
# specify title ↓
return redirect('encyclopedia:entrypage'<strong>, title=title</strong>)
# …
我还强烈建议使用数据库,并且不要从实用程序中获取所有条目:数据库经过优化以有效搜索,而访问文件列表需要线性时间来搜索。如果您定义了一个数据库模型,您可以添加 db_index=True
[Django-doc] 来构建一个可以极大地提高搜索速度的索引。