Django评论没有在模板中显示

时间:2017-09-15 18:43:43

标签: python django

我有一个系统设置,可以在帖子详细信息页面上显示评论,但是评论没有显示。我一直专注于模板标签,因为我在其他地方使用过这个视图代码并且它已经工作了,但是我可能错了。没有错误返回,只是没有在详细视图中显示注释。

userpost_detail.html:

{% extends 'base.html' %}

{% block content %}

    <div class="main">
        <h1 class="posttitle">{{ userpost.title }}</h1>

        <p class="postcontent">{{ userpost.post_body }}</p>

        {% if request.user.is_authenticated and request.user == post.author %}
            <a class="link" href="{% url 'feed:edit_post' post.id %}">Edit Post</a>
        {% endif %}


        <a href="{% url 'feed:add_comment' userpost.id %}">Add Comment</a>

        {% for comment in userpost.usercomment.all %}
            {% if user.is_authenticated %}
                {{ comment.create_date }}
                <!--
                <a class="btn btn-warning" href="{% url 'comment_remove' pk=comment.pk %}">
                    <span class="glyphicon glyphicon-remove"></span>
                </a>
                -->
                <p>{{ comment.comment_body }}</p>
                <p>Posted By: {{ comment.author }}</p>
            {% endif %}
            {% empty %}
            <p>No Comments</p>
        {% endfor %}
    </div>

    {% include 'feed/sidebar.html' %}

{% endblock %}

app PostDetailView:

class PostDetailView(DetailView):
    model = UserPost

app add_comment_to_post view:

@login_required
def add_comment_to_post(request,pk):
    post = get_object_or_404(UserPost,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
            comment.save()
            return redirect('feed:post_detail', pk=post.pk)
    else:
        form = CommentForm()
    return render(request,'feed/comment_form.html',{'form':form})

app urls:

from django.conf.urls import url
from feed import views

app_name = 'feed'

urlpatterns = [
    url(r'^new/$',views.CreatePostView.as_view(),name='new_post'),
    url(r'^post/(?P<pk>\d+)$',views.PostDetailView.as_view(),name='post_detail'),
    url(r'^post/(?P<pk>\d+)/edit/$',views.UpdatePostView.as_view(),name='edit_post'),
    url(r'^post/(?P<pk>\d+)/delete/$',views.DeletePostView.as_view(),name='delete_post'),
    url(r'^post/(?P<pk>\d+)/comment/$',views.add_comment_to_post,name='add_comment'),
]

Models.py:

from django.db import models
from django.core.urlresolvers import reverse
from django.conf import settings

from django.contrib.auth import get_user_model
User = get_user_model()

# Create your models here.
class UserPost(models.Model):
    author = models.ForeignKey(User,related_name='userpost',null=True)
    post_date = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=150,blank=False)
    post_body = models.TextField(max_length=1000,blank=False)

    def publish(self):
        self.save()

    def get_absolute_url(self):
        return reverse('index')

    def __str__(self):
        return self.title

class UserComment(models.Model):
    post = models.ForeignKey('feed.UserPost',related_name='comments')
    author = models.ForeignKey(User,related_name='usercomment')
    comment_date = models.DateTimeField(auto_now_add=True)
    comment_body = models.TextField(max_length=500)

    def publish(self):
        self.save()

    def get_absolute_url(self):
        return reverse("userpost_list")

    def __str__(self):
        return self.comment_body

2 个答案:

答案 0 :(得分:1)

如@ user6731765所述,您需要comments来自related_name

{% for comment in userpost.comments.all %}
  

当您收到comment_remove错误

您需要为comment_remove定义一个网址,并为其定义一个视图。

urlpatterns = [
    . . . . . .
    url(r'^comment/remove/(?P<pk>\d+)/$',views.DeleteCommentView.as_view(),name='comment_remove'),
]

然后在 views.py

class DeleteCommentView(DeleteView):
    model=UserComment

答案 1 :(得分:0)

由于related_name用于UserComment中的帖子,请尝试使用

{% for comment in userpost.comments.all %}

在你的模板中。