Yeni bir Comment
tabanına ekleyen bir yöntemim var ve bunu yaptıktan sonra, bir önceki gönderiye geri dönebilir, bu da herhangi biri olabilir. URL'ye id
için ileterek okunduğunu Bununla beraberGeçirilecek URL parametrelerini vermek
return redirect(reverse('blog:post', args = (post_id,)))
, sayfa önceki Post
geri yönlendirilir: Yani, bunu yapmak için, aşağıdaki kural yaptı.
Sorun şu anda formun geçerli olmaması durumunda. Hata mesajlarını görüntülemek istiyorum, ama şu anki haliyle, formun yeniden oluşturulduğunu, herhangi bir mesajı silindiğini düşünüyorum. Yani, else
koşulunda, yeniden yönlendirmek, yeniden oluşturmak ve iletileri göstermek istiyorum.
return render(request, 'blog/post.html', post_id = post_id)
Ama sonra, geri bakılmaksızın ben aynı sayfada, parametrede id
almak gerekir: Ben bunu böyle yaptık. işlevinde yaptığım gibi post_id
'u geçmem gerekiyor, ancak bir yol bulamıyorum.
Bütün bu yöntem: URL ile, onun id
bağlı Post
görüntülemek için kullanılan
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')
Benim sınıf görünüm:
url(r'^post/(?P<id>[0-9]+)/$', views.GetPostView.as_view(), name = 'post'),
Ve 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()
})
Neredeyse. Mesaj nihayet görüntüleniyor, ancak hala "post_id" mesajını almam gerekiyor. Bu sayfa şu url '/ post/ /' ve sayfayı aynı sayfada göstermem gerekiyor. –
mfgabriel92
Peki, form doğrulama hatalarınızı oluşturduğunuzda, gönderiyi de istersiniz? Bu yöntemde yazı için hiçbir şey görmüyorum (yönlendirme dışında). Bunun için başka bir yöntem var mı? – bpscott
Evet, iletiyi url'deki kimliğe göre görüntülemek için sınıf görünümü. Benim düzenlenmiş soruma bak, lütfen. – mfgabriel92