模板中的数据

Posted

技术标签:

【中文标题】模板中的数据【英文标题】:Data in templates 【发布时间】:2021-10-24 06:23:46 【问题描述】:

我需要你的支持。 我有 2 个模型作者和帖子,我想在模板中显示特定作者的数据。我想显示特定作者的帖子,以及该作者的信息(名字和姓氏)。在我的视图文件中,我创建了一个带有 2 个查询集的方法。其中一个查询集在表中查找特定作者的帖子,另一个查询集在作者表中查找帖子的作者所有者的信息。

我的问题是,我可以只使用一个 QuerySet 吗?如果是,如何在模板中显示?

模型

class Autor(models.Model):
    first_name = models.CharField(max_length=30, null=False, verbose_name='First Name')
    last_name = models.CharField(max_length=30, null=False, verbose_name='Last Name')

class Post(models.Model):
    autor = models.ForeignKey(Autor, on_delete=models.CASCADE)
    post = models.CharField(max_length=200, null=False, verbose_name='Post')

VIEW.PY

def index(request):
    autor = Autor.objects.filter(first_name='Peter').first()
    autor_posts = Post.objects.filter(autor__first_name='Peter')
    return render(request, 'posts.html', 'autor_posts': autor_posts, 'autor': autor)

POSTS.HTML

Author:  autor.first_name ,  autor.last_name 


Posts:
% for post in autor_posts %
    <p> post.id ,  post.post </p>
    <p></p>
% endfor %

【问题讨论】:

【参考方案1】:

你可以这样做:

def index(request):
    autor = Autor.objects.prefetch_related('post_set').filter(first_name='Peter').first()
    return render(request, 'posts.html', 'autor': autor)

这仍然会执行两个查询,一个是获取autor,另一个是预取autor 的所有相关post。但好处是您不必手动编写单独的过滤器来获取autor 的帖子。

所以在你的模板中你可以这样做:

Author:  autor.first_name ,  autor.last_name 

Posts:
% for post in autor.post_set.all %
    <p> post.id ,  post.post </p>
    <p></p>
% endfor %

【讨论】:

以上是关于模板中的数据的主要内容,如果未能解决你的问题,请参考以下文章

python中的model模板中的数据类型

模板中的数据

django 无法访问模板中的 jsonfield 数据

Gatsby 和 GraphQL:访问模板页面中的数据

如何从 Freemarker 中的模板数据映射对象递归打印数据?

Django-模板中的Json数据