在Django模板中,我使用以下方式获取最新评论:
{{ blog.comments.all|dictsort:"created_at"|last }}
其中blog
是Blog
模型的实例,comments
是related_name
ForeignKey
模型的Comment
。< / p>
这相当于
blog.comments.all().order_by("created_at").last()
问题:如何在模板中获取评论的text
字段?
在视图中,我可以使用以下方式执行此操作:
blog.comments.all().order_by("created_at").last().text
如果我尝试:
{{ blog.comments.all|dictsort:"created_at"|last.text }}
我得到了:
无法解析余数:&#39; .text&#39; TemplateSyntaxError
答案 0 :(得分:1)
with
代码:
{% with newest_comment=blog.comments.all|dictsort:"created_at"|last %}
{{ newest_comment.text }}
{% endwith %}
cached_property
装饰者:
models.py
from django.utils.functional import cached_property
class Blog(models.Model):
@cached_property
def newest_comment(self):
return self.comments.order_by('created_at').last()
template.html
{{ blog.newest_comment.text }}
上下文:
context['newest_comment'] = blog.comments.order_by('created_at').last()
return render(request, template, context)
latest()
方法:
models.py
class Comment(models.Model):
class Meta:
get_latest_by = 'created_at'
template.html
{{ blog.comments.latest.text }}
答案 1 :(得分:1)
一种方法是使用“with”:
{% with blog.comments.all|dictsort:"created_at"|last as lastcomment %}
{{ lastcomment.text }}
{% endwith %}