Как заставить функцию редактирования работать в views.py Django
Я создаю опцию редактирования для своей записи. Но вместо того, чтобы перенаправить меня на страницу редактирования, она ведет меня на страницу добавления для создания новой формы. Как перенаправить меня на страницу редактирования?
Также, как мне убедиться, что предыдущий ввод пользователя будет отражаться, когда он нажмет на кнопку редактирования. Я использовал инициалы - это лучший способ сделать это, поскольку я использую не модели, а forms.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("add_page", views.add_page, name="addpage"),
path("edit_page/<str:title>", views.edit_page, name="editpage")
]
Я думаю, что проблема с вашим кодом в том, что он вызывает редирект на несуществующий url. 'encyclopedia:entrypage'
не существует в вашем urls.py
. Есть два способа исправить это. Вариант #1 Создайте url для страницы входа в urls.py
с name=entrypage и параметром в url, обозначающим страницу входа. Или вариант #2 Вернуться непосредственно к представлению страницы входа в функции edit_page
. Вот грубый набросок того, как это можно сделать
In edit_page in views.py:
# ...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...