def view_post(request, post_id):
"""Display a blog post"""
blogpost = BlogPost.objects.get(id=post_id)
context = {'blogpost': blogpost}
return render(request, 'blogs/blogpost.html', context)
def new_post(request):
"""Create a new blog post"""
if request.method != 'POST':
# No data submitted; create a blank form.
form = BlogPostForm()
else:
# POST data submitted; process data.
form = BlogPostForm(data=request.POST)
if form.is_valid():
form.save()
return redirect('blogs:index')
# Display a blank or invalid form.
context = {'form': form}
return render(request, 'blogs/new_post.html', context)
def edit_post(request, post_id):
blogpost = BlogPost.objects.get(id=post_id)
if request.method != 'POST':
# Initial request; pre-fill form with current blogpost.
form = BlogPostForm(instance=blogpost)
else:
# POST data submitted; process data.
form = BlogPostForm(instance=blogpost, data=request.POST)
if form.is_valid():
form.save()
view_post(request,post_id)
# Display form with original contents
context = {'blogpost': blogpost,'form': form}
return render(request, 'blogs/edit_post.html', context)
Приведенный выше код предназначен для сайта блога, где пользователи могут создавать, редактировать и просматривать сообщения блога. Edit_post должен обработать сообщение, отредактированное пользователем, а затем перенаправить на сообщение, которое было отредактировано. Насколько мне известно, перенаправление не позволяет отправлять данные, поэтому я безуспешно пытался вложить функцию.
Я видел в Интернете, что файлы cookie / сообщения могут быть решением. Если да, то как я могу это реализовать?
EDIT: Я добавил
print("DEBUG returning HttpResponseRedirect of reverse of view_post")
return HttpResponseRedirect(reverse(view_post, args=[post_id]))
в конец else для edit_post, заменив предыдущую попытку view_post на перенаправление. Однако после отправки данных сообщения я получаю сообщение об ошибке NoReverseMatch at /post/edit_post/1/