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

Django自定义模板标记传递可变数量的参数,django,django-templates,Django,Django Templates,我正在尝试编写django自定义模板标记,该标记将在模板中调用,如下所示: 模板: {% load tag_name %} {% tag_fn arg1 arg2 ... arg n %} arg1、…、argn是python变量 模板标签: {% load tag_name %} {% tag_fn arg1 arg2 ... arg n %} 在模板标签中,我有四个双核 d1={“key1”:“some text”+str(arg2),“key2”:“some text”+str(arg

我正在尝试编写django自定义模板标记,该标记将在模板中调用,如下所示:

模板:

{% load tag_name %}
{% tag_fn arg1 arg2 ... arg n %}
arg1、…、argn
是python变量

模板标签:

{% load tag_name %}
{% tag_fn arg1 arg2 ... arg n %}
在模板标签中,我有四个双核

d1={“key1”:“some text”+str(arg2),“key2”:“some text”+str(argm)
like wise我有四本字典

根据
arg1
的值,应该呈现相应的字典,并且我希望模板标记将
“一些文本值(arg1)一些文本值(argm)”
返回到模板


请建议一种实现方法。

通过使用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()

希望这对您有所帮助。

实现这一点的最简单方法是使用Python的常规方法来接受可变数量的参数:

@register.simple_标记()
def my_标签(*args):
#使用args执行操作,args是所有参数的列表
返回“要输出的内容”
然后,您可以随心所欲地使用它:

{% my_tag arg1 arg2 arg3 %}
Django文档实际上在这个主题上相当全面。