2017-09-15 11 views
1

Ich habe eine Systemeinstellung, um Kommentare auf einer Post-Detailseite anzuzeigen, die Kommentare werden jedoch nicht angezeigt. Ich habe mich auf die Template-Tags konzentriert, weil ich diesen View-Code woanders verwendet habe und es funktioniert hat, aber ich könnte falsch liegen. Es werden keine Fehler zurückgegeben, der Kommentar wird nicht in der Detailansicht angezeigt.Django Kommentare nicht in Vorlage

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 Ansicht:

@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: Statt

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

Ich sehe nicht, keine 'userpost' in Zusammenhang. –

+0

Ist "Benutzer" im Kontext? – schwobaseggl

+0

Nur "post_detail" URL hinzugefügt. – Garrett

Antwort

1

Wie @ user6731765 erwähnt benötigen Sie comments Coz von related_name

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

When you get comment_remove error

Sie müssen eine URL für comment_remove definieren und eine Ansicht für das definieren.

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

Dann in views.py

class DeleteCommentView(DeleteView): 
    model=UserComment 
0

Aufgrund der related_name Sie Beiträge in UserComment verwenden, versuchen

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

in Ihrer Vorlage.

+0

gibt diesen Fehler: 'NoReverseMatch um/feed/post/5 Reverse für 'comment_remove' nicht gefunden. 'comment_remove' ist keine gültige Ansichtsfunktion oder kein Mustername.' – Garrett