У меня есть метод, который вставляет в базу новый Comment
, и после этого он перенаправляет обратно на предыдущий пост, который может быть любым. Таким образом, чтобы сделать это, я сделал следующее правило:Передача параметров URL для визуализации
return redirect(reverse('blog:post', args = (post_id,)))
С ним, страница перенаправляется обратно к предыдущему Post
считывании, переходя к URL-id
.
Проблема сейчас, если форма недействительна. Я хочу отображать сообщения об ошибках, но я думаю, что так, как сейчас, форма воссоздается, стирая любое сообщение. Итак, в состоянии else
я хочу, вместо того, чтобы перенаправлять, снова показывать его и показывать сообщения. Я сделал это так:
return render(request, 'blog/post.html', post_id = post_id)
Но тогда, мне нужно, чтобы вернуться к той же странице, я был, независимо от id
в параметре. Мне нужно передать post_id
, как и в функции redirect
, но я не могу найти способ.
Это весь метод:
def write_comment(request, post_id):
"""
Write a new comment to a post
"""
form = CommentForm(request.POST or None)
if form.is_valid():
post = Post.objects.get(pk = post_id)
post.n_comments += 1
post.save()
comment = Comment()
comment.comment = request.POST['comment']
comment.created_at = timezone.now()
comment.modified_at = timezone.now()
comment.post_id = post_id
comment.user_id = 2
comment.save()
return redirect(reverse('blog:post', args = (post_id,)))
else:
# Need to pass the parameter here, in order to not recreate the form
return render(request, 'blog/post.html')
вид Мой класс, используемый для отображения Post
, в зависимости от его id
, по адресу:
url(r'^post/(?P<id>[0-9]+)/$', views.GetPostView.as_view(), name = 'post'),
И GetPostView
:
class GetPostView(TemplateView):
"""
Render the view for a specific post and lists its comments
"""
template_name = 'blog/post.html'
def get(self, request, id):
return render(request, self.template_name, {
'post': Post.objects.get(pk = id),
'comments': Comment.objects.filter(post = id).order_by('-created_at'),
'form': CommentForm()
})
Почти. Сообщение наконец отображается, но мне все равно нужно получить 'post_id'. Страница - это url '/ post/ /', и мне нужно отобразить страницу на этой же странице. –
mfgabriel92
Итак, когда вы визуализируете ошибки проверки формы, вы также хотите опубликовать сообщение? Я ничего не вижу для сообщения в этом методе (кроме перенаправления). Есть ли другой способ? – bpscott
Да, представление класса для отображения сообщения в соответствии с идентификатором в URL-адресе. Посмотрите мой отредактированный вопрос, пожалуйста. – mfgabriel92