dav*_*ers 9 django django-templates
我不知道是否可能,但我希望能够写出如下内容:
{% with var1 var2 var3 as some_list %}
{{ some_list|maximum }}
{% endwith %}
Run Code Online (Sandbox Code Playgroud)
从任意数量的模板变量和/或文字中动态创建列表似乎很有用,所以我希望我忽略了一些简单的事情.
但是,如果不这样做,我想知道如何创建一个接受任意数量参数的模板标签.(我玩过simple_tag,适用于接受固定数量参数的标签.)
我不想去创建解析器和子类化的麻烦,django.template.Node直到我确定没有更简单的解决方案.
Wil*_*rdy 15
如果要添加新变量(即some_list),则需要访问模板的上下文,因此simple_tag这还不够.
对我来说,第一种方法是尝试在视图中执行此类工作,以使模板尽可能简单.
如果这不合适,您必须手动编写标记,如下所示:
@register.tag
def make_list(parser, token):
bits = list(token.split_contents())
if len(bits) >= 4 and bits[-2] == "as":
varname = bits[-1]
items = bits[1:-2]
return MakeListNode(items, varname)
else:
raise template.TemplateSyntaxError("%r expected format is 'item [item ...] as varname'" % bits[0])
class MakeListNode(template.Node):
def __init__(self, items, varname):
self.items = map(template.Variable, items)
self.varname = varname
def render(self, context):
context[self.varname] = [ i.resolve(context) for i in self.items ]
return ""
Run Code Online (Sandbox Code Playgroud)
并像这样使用它来创建一个新变量some_list:
{% make_list var1 var2 var3 as some_list %}
Run Code Online (Sandbox Code Playgroud)
随意给它一个更好的名字!
| 归档时间: |
|
| 查看次数: |
9639 次 |
| 最近记录: |