我有一个简单的Django应用程序,我会很高兴能帮助我解决这个问题。
我一直在尝试将djangogirls教程中的评论功能添加到我的应用程序“时间轴”中。
到目前为止,我已经在models.py中添加了一个评论模型:
class Comment(models.Model):
post = models.ForeignKey('timeline.Photo', related_name='comments')
author = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
def __unicode__(self):
return self.text
def __str__(self):
return self.text
已包含照片模型:
class Photo(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
title = models.CharField(max_length=120)
slug = models.SlugField(unique=True)
image = ProcessedImageField(upload_to=upload_location,
null=True,
blank=False,
processors=[Transpose(), ResizeToFit(1000, 1000, False)],
#processors=[Transpose(), ResizeToFit(width=960)],
format='JPEG',
options={'quality': 50},
width_field="width_field",
height_field="height_field")
height_field = models.IntegerField(default=0)
width_field = models.IntegerField(default=0)
description = models.TextField()
updated = models.DateTimeField(auto_now=True, auto_now_add=False)
timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
def __unicode__(self):
return self.title
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse("timeline:detail", kwargs={"slug": self.slug})
class Meta:
ordering = ["-timestamp", "-updated"]
我正在努力让评论出现在我的HTML中,但到目前为止我已按照说明使用:
{% for comment in post.comments.all %}
<div class="comment">
<div class="date">{{ comment.created_date }}</div>
<strong>{{ comment.author }}</strong>
<p>{{ comment.text|linebreaks }}</p>
</div>
{% empty %}
<p>No comments here yet :(</p>
{% endfor %}
视图:
def photo_detail(request, slug=None):
if not request.user.is_authenticated():
return HttpResponseRedirect("/accounts/login")
instance = get_object_or_404(Photo, slug=slug)
share_string = quote_plus(instance.description)
context = {
"title": instance.title,
"instance": instance,
"share_string": share_string,
}
return render(request, "photo_detail.html", context)
我已将评论模型添加到我的管理员,我可以添加评论,但它们根本就没有显示,这让我疯狂。我相信一双新鲜的眼睛很容易发现这一点。使用Django 1.9,如果需要更多代码,请告诉我!
上的代码任何帮助都非常感谢大家!欢呼声。
答案 0 :(得分:0)
您没有将任何名为post
的对象传递到模板中进行渲染。
您需要更改从视图传递的上下文:
context = {
"title": instance.title,
"photo": instance,
"share_string": share_string,
}
或者更改模板中的代码:
{% for comment in instance.comments.all %}
(一个或另一个,不是两个)
我建议更改视图中的上下文以使用更有意义的名称photo
。