如何在自定义模板标记上使用模板过滤器?

Max*_*ier 5 tags django templates filter

我有关于模板标签的django问题.我有一个名为modal_form4个参数的模板标签.此模板标记与基本变量完美匹配,例如:

{% modal_form "clients" contact_form "Contacts" "contact" %}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试过滤自​​定义模板标记内的变量时,它不起作用:

{% modal_form "parameters" form_dict|key:parameter parameter name_dict|key:parameter %}
Run Code Online (Sandbox Code Playgroud)

此自定义过滤器也完全在标记之外工作(此过滤器获取特定键的dict值).我有这个错误:

渲染时捕获VariableDoesNotExist:键[form_dict | key:parameter]的查找失败

也许我必须以不同的方式编写标签以支持内部过滤器?

这是我的代码代码:

def modal_form(app, object_form, object_name, object_verbose_name):
    return { 'app': app, 'object_form': object_form, 'object_name': object_name, 'object_verbose_name': object_verbose_name }

register.inclusion_tag('tags/modal_form.html')(modal_form)
Run Code Online (Sandbox Code Playgroud)

我的过滤器代码:

def key(d, key_name):
    try:
        value = d[key_name]
    except KeyError:
        #from django.conf import settings

        #value = settings.TEMPLATE_STRING_IF_INVALID
        value = 0

    return value
key = register.filter('key', key)
Run Code Online (Sandbox Code Playgroud)

你有什么想法 ?你想要更多代码吗?

提前感谢您的回答.

Ser*_*ney 7

如果您的标记和过滤器分别正常工作,请尝试使用with语句:

{% with var_one=form_dict|key:parameter var_two=name_dict|key:parameter %}
    {% modal_form "parameters" var_one parameter var_two %}
{% endwith %}
Run Code Online (Sandbox Code Playgroud)

  • 要添加到上面,下面允许您设置模板标记的结果在过滤器中使用它.`{%with var ='temp_tag arg1 arg2'%} {{var | filter_name:"Str"}} {%endwith%}` (2认同)