如何使编辑函数在views.py Django中工作



我正在为我的条目创建一个编辑选项。但是,我没有重定向到条目页面,而是转到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...

最新更新