因此,目前基本上,如果用户要在我的网站上的帖子中添加评论,它将带他们进入带有表单的另一页。但是,我希望评论表单位于实际的“帖子详细信息”页面上,因此用户不必转到另一个页面即可发表评论。
到目前为止,我已经尝试添加一些上下文内容,并将注释表单位置的url更改为post_detail.html
,并将comment_form.html
的代码放在此处,但这没用。
以下是相关的views.py
add_comment_to_post
视图
@login_required(login_url='/mainapp/user_login/')
def add_comment_to_post(request,pk):
post = get_object_or_404(Post,pk=pk)
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.post = post
comment.author = request.user # add this line
comment.save()
return redirect('mainapp:post_detail',pk=post.pk)
# remove `def form_valid`
else:
form = CommentForm()
return render(request,'mainapp/comment_form.html',{'form':form})
这是PostDetailView
视图。
class PostDetailView(DetailView):
model = Post
这是comment_form.html
代码
<form class="post-form" method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="submitbtn">Comment</button>
</form>
这是相关的urls.py
文件
path('post/<int:pk>/comment/', views.add_comment_to_post, name='add_comment_to_post'),
path('post/<int:pk>', views.PostDetailView.as_view(), name='post_detail'),
因此,目前,当我认为自己的解决方案可行时,我将comment_form.html的代码添加到了post_detail.html文档中,但是只显示了Comment
html按钮。如何将CommentForm与帖子详细信息页面放在同一页面上?
感谢您的帮助:)
答案 0 :(得分:1)
问题是,当Django渲染PostDetailView
时,context
字典没有form
项(form
项仅在您的{ {1}}视图,因为Django模板引擎无法从add_comment_to_post
字典中找到form
项,所以它没有呈现任何内容。
您需要做的是更改context
并将PostDetailView
注入CommentForm
的上下文中。这是一种实现方法:
PostDetailView
您要做的基本上是覆盖默认的class PostDetailView(DetailView):
model = Post
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['form'] = CommentForm() # Inject CommentForm
return context
,并将您的get_context_data
作为CommentForm()
的一部分注入,然后进行渲染
答案 1 :(得分:0)
您可以尝试这样:
class PostDetailView(DetailView):
model = Post
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['comment_form'] = YourModelFormForComment() # Your comment form
return context
在模板中
{{comment_form.as_p}}