【问题标题】:Why reply to the comment is not displaying? Python Django为什么回复评论不显示?蟒蛇
【发布时间】:2022-01-03 22:54:12
【问题描述】:

我正在尝试添加一些允许回复评论并在评论下方显示回复的功能,但在尝试了所有操作后我无法看到 回复正在显示的评论。没有显示错误,所以我无法弄清楚。我猜模板中的某些内容不正确?请在下面找到代码。希望这就是为我提供帮助所需的全部内容。

模型:评论模型和回复模型

class Comment(models.Model):
    """comments for Post model"""

    comment_post = models.ForeignKey(Post, on_delete=models.CASCADE,
                                     related_name='comment_for_post', null=True, default='')
    comment_text = models.TextField(null=True)
    date_posted = models.DateTimeField(auto_now=True)

    def get_absolute_url(self):
        """Reverse the Comment to the url once action
        has been taken with primary key to direct back to details page"""
        return reverse('posts:post_details', kwargs={'pk': self.pk})

    def __str__(self):
        return self.comment_text


class Reply(models.Model):
    """add reply to commnets"""
    reply_comment = models.ForeignKey(
        Comment, on_delete=models.CASCADE, null=True, default='', related_name='comment_reply')
    reply_text = models.TextField()
    date_posted = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.reply_text

VIEWS:回复评论视图

@login_required
def reply_to_comment(request, pk):
    comment = get_object_or_404(models.Comment, pk=pk)
    
    if request.method == 'POST':
        form = forms.ReplyCommentForm(request.POST)
        
        if form.is_valid():
            reply = form.save(commit=False)
            reply.reply_comment = comment
            reply.save()
            return redirect('posts:post_details', pk=comment.pk)

    else:
        form = forms.ReplyCommentForm()

    return render(request, 'posts/reply_comment_form.html', context={'form': form})

网址:

urlpatterns = [
    path('post_list/', views.PostListView.as_view(), name='post_list'),
    path('user/<str:username>/', views.UserPostListView.as_view(), name='user_posts'),
    path('create/', views.PostCreateView.as_view(), name='create'),
    path('details/<int:pk>/', views.PostDetailView.as_view(), name='post_details'),
    path('delete/<int:pk>/', views.PostDeleteView.as_view(), name='post_delete'),
    path('update/<int:pk>/', views.PostUpdateView.as_view(), name='post_update'),
    path('<str:category>/', views.CategoryPostListView.as_view(),
         name='category_posts'),
    path('posts/<int:pk>/comment', views.add_comment_to_post,
         name='post_comment_list'),
    path('delete_comment/<int:pk>/',
         views.CommentDeleteView.as_view(), name='delete_comment'),
    path('comment/<int:pk>/reply/', views.reply_to_comment, name='reply'),

模板:

          <div class='container'>
            {% for reply in comment.comment_reply.all %}
            <br>
            {% if  object.author == user %}
            <div class="">
                <ul>
                    <li>
                        <p >{{reply.reply_text}}</p>
                        <p class='text-capitalize'>From {{user.username}} on {{comment.date_posted|date:'d-M-y'}}.</p>
                    </li>
                </ul>

                </div>
                {%else %}
                <div class="">

                    <ul>
                        <li>
                            <p >{{reply.reply_text|safe}}</p>
                            <p class='text-capitalize'>From {{user.username}} on {{comment.date_posted|date:'d-M-y'}}.</p>
                        </li>
                    </ul>

                {% endif %}
                {% endfor %}
                </div>

【问题讨论】:

    标签: python-3.x django


    【解决方案1】:

    尝试添加以下代码:

    context={'form': form, 'comment': comment} 
    

    【讨论】:

    • 试过了,什么也没做。模板似乎根本没有响应查询。
    • @Ram 这是你发布的模板吗? reply_comment_form.html 和 {% if object.author == user %} author 你的模型在哪里?
    • class Post(models.Model): author = models.ForeignKey(User, on_delete=models.CASCADE, default="") title = models.CharField(max_length=200) date_posted = models.DateTimeField (default=timezone.now) text = models.TextField() category = models.CharField(max_length=100, null=True, Choices=CHOICES) tags = models.ManyToManyField(Tag) def __str__(self): return self.title
    • 希望这有帮助吗?
    • @Ram {% if reply.author == request.user %}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多