我正在为我的条目创建一个编辑选项。但是,我没有重定向到条目页面,而是转到addpage来创建一个新表单。如何重定向到编辑页面?
此外,当用户单击编辑按钮时,我如何确保用户以前的输入能够反映出来。我使用了首字母缩写——这是最好的方法吗,因为我使用的不是模型,而是形式。Form.
VIEWS.PY
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 edit_page(request, title):
entry = util.get_entry(title)
if request.method == "POST":
form = AddPageForm(request.POST, initial={
"title": title,
"content": content
})
if form.is_valid():
util.save_entry(title, content)
return redirect('encyclopedia:entrypage', title=title)
else:
form = AddPageForm()
return render(request, "encyclopedia/editpage.html", {"form":form})
编辑页面
{% block body %}
<h1>Edit {{ title }}</h1>
<form action="" method="post">
{% csrf_token %}
{% form %}
<input type="submit" value="Submit" class="btn btn-secondary">
</form>
条目页面
{% block body %}
{{ content|safe }}
<a href="{% url 'encyclopedia:editpage' title=title %}" class="btn btn-primary">Update</a>
<!-- <input="text" name="title" value="{{game.title}}" />
<input="text" name="genre" value="{{game.genre}}" /> -->
{% endblock %}
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"),
path("edit_page/<str:title>", views.edit_page, name="editpage")
]
我认为您的代码的问题在于它在一个不存在的url上调用重定向。'encyclopedia:entrypage'
在您的urls.py
中不存在。有两种方法可以解决这个问题。选项#1为urls.py
中的entrypage创建一个url,name=entrypage,url中的一个参数表示哪个entrypage。或者选项#2直接返回到edit_page
函数中的entrypage视图。以下是你将如何进行的粗略草图
在views.py中的edit_page中:
# ...Code above
if form.is_valid():
util.save_entry(title, content)
return entry_page_view(request, title)
# 'title' if this view has a title passed as a kwarg or arg
# Code below...