2016-09-18 2 views
0

Я делаю проект в django 1.9.9/python 3.5, из соображений физических упражнений У меня есть приложение для блога, приложение для статей и приложение для комментариев. Комментарии приложения должны быть в общем связаны с блогами и статьями. Моя проблема в том, что шаблоны не показывают мои комментарии. Комментарии создаются и относятся к их сообщению/статье, потому что я могу видеть это в admin, так что это не проблема создания комментариев. Они просто не отображаются в моем шаблоне.Комментарии не отображаются в post_detail view

Мои комментарии/models.py:

from django.db import models 


class Comment(models.Model): 

    post = models.ForeignKey('blog.Entry',related_name='post_comments', blank=True, null=True) 
    article = models.ForeignKey('articles.Article', related_name='article_comments', blank=True, null=True) 
    body = models.TextField() 
    created_date = models.DateTimeField(auto_now_add=True) 

def __str__(self): 
    return self.body 

Мой commments/views.py:

from django.utils import timezone 
from django.shortcuts import render, get_object_or_404 
from django.shortcuts import redirect 

from .forms import CommentForm 
from .models import Comment 
from blog.models import Entry 
from articles.models import Article 
from blog.views import post_detail 
from articles.views import article_detail 



def article_new_comment(request, pk): 
    article = get_object_or_404(Article, pk=pk) 
    if request.method == "POST": 
     form = CommentForm(request.POST) 
     if form.is_valid(): 
      comment = form.save(commit=False) 
      comment.article = article 
      comment.created_date=timezone.now() 
      comment.save() 
      return redirect(article_detail, pk=article.pk) 
    else: 
     form=CommentForm() 
    return render(request, 'comments/add_new_comment.html', {'form': form}) 



def blog_new_comment(request, pk): 
    post = get_object_or_404(Entry, pk=pk) 
    if request.method == "POST": 
     form = CommentForm(request.POST) 
     if form.is_valid(): 
      comment = form.save(commit=False) 
      comment.post = post 
      comment.created_date = timezone.now() 
      comment.save() 
      return redirect(post_detail, pk=post.pk) 
    else: 
     form=CommentForm() 
    return render(request, 'comments/add_new_comment.html', {'form': form}) 

А вот мой post_detail.html, где комментарии должны быть. Я не буду размещать article_detail.html, потому что они точно так же:

{% extends 'blog/base.html' %} 
{% block content %} 
    <div class="post"> 
     {% if post.modified_date %} 
      <div class="date"> 
       {{ post.modified_date }} 
      </div> 
     {% else %} 
      <div class="date"> 
       {{ post.published_date }} 
      </div> 
     {% endif %} 
     <a class="btn btn-default" href="{% url 'post_edit' pk=post.pk %}"><span class="glyphicon glyphicon-pencil"> Edit Post </span></a> 
     <h1>{{ post.title }}</h1> 
     <p>{{ post.text|linebreaksbr }}</p> 
     <hr> 
     <a class="btn btn-default" href="{% url 'new_blog_comment' pk=post.pk %}"><span class="glyphicon glyphicon-pencil"> Add Comment </span></a> 
     {% for comment in post.comments.all %} 
      <div class="comment"> 
       <div class="date">{{ comment.created_date }}</div> 
       <p>{{ comment.body|linebreaksbr }}</p> 
      </div> 
     {% empty %} 
      <p>No comments here yet</p> 
     {% endfor %} 
    </div> 
{% endblock %} 

Позвольте мне знать, если любой другой файл поможет вам, чтобы помочь мне, как блог/моделей, представлений, хотя я не думаю, что проблема здесь.

ответ

2

Вы явно указали связанное с ним имя комментариев в своем сообщении до post_comments. Таким образом, вы должны получить доступ к ним, как:

{% for comment in post.post_comments.all %} 

Это предполагает, что post в шаблоне относится к экземпляру Entry модели.

+0

ДА! Спасибо большое. Я довольно новичок в django, поэтому иногда я не могу найти такую ​​очевидную ошибку, как эта. –

+0

Нет проблем. Если вы используете 'Article' и' Entry' аналогичным образом во многих областях (например, оба они имеют 'Comment's attach), посмотрите на их подклассы из базовой модели, а затем на внешний ключ' Comment' на базовая модель, а не поле для каждого. См. Https://docs.djangoproject.com/en/1.10/topics/db/models/#multi-table-inheritance –

Смежные вопросы