如何将标签的结果传递给 Django 中的过滤器?

Posted

技术标签:

【中文标题】如何将标签的结果传递给 Django 中的过滤器?【英文标题】:How to pass the result of a tag to a filter in Django? 【发布时间】:2011-10-20 07:59:10 【问题描述】:

例如

 % widthratio a b c %|add: 2 

【问题讨论】:

【参考方案1】:

你不能,除非标签知道如何修改上下文(那些通常有xxx as variable 语法可用)。如果没有,您可以编写一个包装器(作为自定义标签)。

【讨论】:

你现在可以了,因为 django 不久前在模板语言中添加了“as”赋值运算符(1.9 版?)。请参阅下面的答案。【参考方案2】:

这样做的正确方法是编写自己的标签:

% widthratio_add a b c d %

你写的标签和widthratio做同样的逻辑,然后加上数字。

不过,我怀疑您只是想这样做,因为 django 不允许模板中的基本数学超出“添加”,而当您编写自己的标签时,您可以用更少的代码做一些更直接的事情论据:

% mymathtag a d %

查看此内容以获得有关如何执行此操作的一般说明:Do math using Django template filter?

【讨论】:

【参考方案3】:

这是我的自定义模板标签解决方案:

from django import template
from django.template.defaulttags import WidthRatioNode

register = template.Library()

class WidthRationExtraNode(WidthRatioNode):
    def render(self, context):
        extra = int(self.extra.resolve(context))
        value = int(super(WidthRationExtraNode, self).render(context)) 
        return str(value+extra)
    def __init__(self, val_expr, max_expr, max_width, extra):
        self.extra = extra
        super(WidthRationExtraNode, self).__init__(val_expr, max_expr, max_width)

def widthratioextra(parser, token):
    bits = token.contents.split()
    if len(bits) != 5:
        raise TemplateSyntaxError("widthratio takes four arguments")
    tag, this_value_expr, max_value_expr, max_width, extra = bits

    return WidthRationExtraNode(parser.compile_filter(this_value_expr),
                          parser.compile_filter(max_value_expr),
                          parser.compile_filter(max_width),
                          parser.compile_filter(extra))
widthratioextra = register.tag(widthratioextra)

您可以在模板中使用它:

 % widthratioextra a b c d %

给你的应用添加自定义模板标签比较容易,如果你不知道怎么做,这里是手册的相关部分:https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

【讨论】:

【参考方案4】:

只需使用“as”关键字:

% widthratio a b c 作为结果 % 结果 |添加:2

【讨论】:

以上是关于如何将标签的结果传递给 Django 中的过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

如何将javascript变量传递给django自定义过滤器

将 kwargs 传递给 Django 过滤器

如何将javascript变量传递给django模板标签

Django Templates — 将模板中的变量值传递给 templatetags 过滤器

django - 如何将多个值传递给模板标签

如何将javascript变量传递给django自定义过滤器