如何将标记的结果传递给Django中的过滤器?
e.g。
{{ {% widthratio a b c %}|add: 2 }}
答案 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}}