2017-09-15 101 views
1

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

应用PostDetailView:

class PostDetailView(DetailView): 
    model = UserPost 

应用add_comment_to_post视图:

@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}) 

应用网址:

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 
+0

我没有看到在上下文中没有'userpost'。 –

+0

上下文中是否是'user'? – schwobaseggl

+0

刚刚添加了'post_detail'网址。 – Garrett

回答

1

正如@ user6731765提到你需要comments堂妹的related_name

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

When you get comment_remove error

您需要定义一个URL为comment_remove,并定义一个视图。

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

然后在views.py

class DeleteCommentView(DeleteView): 
    model=UserComment 
0

由于related_name您在使用UserComment上岗,试着在你的模板使用

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

代替。

+0

给出了此错误:'NoReverseMatch at/feed/post/5 找不到'comment_remove'。 'comment_remove'不是有效的视图函数或模式名称 – Garrett

相关问题