【发布时间】:2011-10-20 07:59:10
【问题描述】:
如何将标签的结果传递给 Django 中的过滤器?
例如
{{ {% widthratio a b c %}|add: 2 }}
【问题讨论】:
标签: django django-templates django-template-filters
如何将标签的结果传递给 Django 中的过滤器?
例如
{{ {% widthratio a b c %}|add: 2 }}
【问题讨论】:
标签: django django-templates django-template-filters
你不能,除非标签知道如何修改上下文(那些通常有xxx as variable 语法可用)。如果没有,您可以编写一个包装器(作为自定义标签)。
【讨论】:
这样做的正确方法是编写自己的标签:
{% widthratio_add a b c d %}
你写的标签和widthratio做同样的逻辑,然后加上数字。
不过,我怀疑您只是想这样做,因为 django 不允许模板中的基本数学超出“添加”,而当您编写自己的标签时,您可以用更少的代码做一些更直接的事情论据:
{% mymathtag a d %}
查看此内容以获得有关如何执行此操作的一般说明:Do math using Django template filter?
【讨论】:
这是我的自定义模板标签解决方案:
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/
【讨论】:
只需使用“as”关键字:
{% widthratio a b c 作为结果 %} {{ 结果 |添加:2 }}
【讨论】: