Django自定义模板标记传递可变数量的参数

时间:2011-07-25 13:32:45

标签: django django-templates

我正在尝试编写一个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)"作为结果。

请建议实施方法。

2 个答案:

答案 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 %}