我正在尝试编写一个django自定义模板标记,该标记将在模板中调用,如下所示:
模板:
{% load tag_name %}
{% tag_fn arg1 arg2 ... arg n %}
arg1, ..., arg n
是python变量。
模板标记:
在模板标签中,我有四个双子座
d1 = {"key1": "some text" + str(arg2), "key2":" some text" + str(arg m)
我明智地有四本词典。
基于arg1
的值,应该呈现相应的字典,并且我希望模板标记返回"some text value(arg1) some text value(arg m)"
作为结果。
请建议实施方法。
答案 0 :(得分:4)
您可以使用Python内置的方式从列表中传入多个值,将任意数量的变量传递到自定义模板标记。例如:
from django import template
register = template.Library()
@register.tag('my_tag')
def do_whatever(parser, token):
bits = token.contents.split()
"""
Pass all of the arguments defined in the template tag except the first one,
which will be the name of the template tag itself.
Example: {% do_whatever arg1 arg2 arg3 %}
*bits[1:] would be: [arg1, arg2, arg3]
"""
return MyTemplateNode(*bits[1:])
class MyTemplateNode(template.Node):
def __init__(self, *args, **kwargs):
do_something()
def render(self, context):
do_something_else()
希望能帮到你。
答案 1 :(得分:0)
最简单的方法是使用Python接受可变数量args的常规方法:
@register.simple_tag()
def my_tag(*args):
# do stuff with args, which is a list of all the arguments
return 'what you want to output'
然后,您可以根据需要使用它:
{% my_tag arg1 arg2 arg3 %}