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

时间:2011-08-04 19:48:54

标签: django django-templates django-template-filters

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

e.g。

{{ {% widthratio a b c %}|add: 2 }}

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

执行此操作的正确方法是编写自己的标记:

{%widthratio_add a b c d%}

您编写的标记与widthratio具有相同的逻辑,然后将数字添加到其中。

虽然,我怀疑你只是试图这样做,因为django不允许模板中的基本数学超出“添加”,并且当你编写自己的标签时,你可以用更少的东西做更简单的事情参数:

{%mymathtag a d%}

请查看此处,了解如何执行此操作的一般说明:Do math using Django template filter?

答案 2 :(得分:0)

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

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/

答案 3 :(得分:0)

只需使用" as"关键字:

{%widthratio a b c as result%} {{result |添加:2}}