Django 模板标签 - 返回多个值或对象

Posted

技术标签:

【中文标题】Django 模板标签 - 返回多个值或对象【英文标题】:Django Template Tags - Return multiple values or object 【发布时间】:2013-03-18 22:26:57 【问题描述】:

我有一个 Django (1.5) 模板标签,我在局部视图中使用它来呈现一些随机内容。该标记对单个记录进行查询。我退回单个物品没有问题,但在尝试退回完整物品以供使用或多个物品时我遇到了麻烦。

这是我的标签

@register.inclusion_tag('_footer.html')
def get_random_testimonial():
    # Grab random record
    record = Testimonials.objects.order_by('?')[0]
    return record.text

我希望能够将record.text和record.id都返回到模板标签

为了呈现标签,我在 _footer.html 视图中有这个

% load current_tags %
% get_random_testimonial %

有没有办法我可以只返回记录对象并能够通过以下方式获取该对象的所有值:

 % get_random_testimonial.text %
 % get_random_testimonial.id %

【问题讨论】:

【参考方案1】:

这作为包含标签没有意​​义。特别是当您似乎在与您告诉它渲染相同的模板中使用它时。

你需要的是assignment tag:

@register.assignment_tag
def get_random_testimonial():
    return Testimonials.objects.order_by('?')[0]

那么你可以这样做:

% get_random_testimonial as my_testimonial %
 my_testimonial.text 
 my_testimonial.id 

【讨论】:

感谢 Daniel,模板标签的新手,对 2 之间的区别以及何时应该使用它们有点困惑。 看起来 assignment_tag 不存在了 嗯,这个答案已经有六年了。您可以将其替换为 simple_tag,它现在支持完全相同的赋值语法。

以上是关于Django 模板标签 - 返回多个值或对象的主要内容,如果未能解决你的问题,请参考以下文章

Django模板:在同一基础中使用多个块标签

Django 自定义模板标签不返回任何值

如何在 django 的 AJAX 请求中返回多个 JSON 对象

Django模板如何对简单标签返回的结果应用过滤器

django url 模板标签的问题,% url %

Django学习系列之模板