如何在自定义模板标签上使用模板过滤器? [英] How to use a template filter on a custom template tag?

查看:46
本文介绍了如何在自定义模板标签上使用模板过滤器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个关于模板标签的django问题。我有一个名为 modal_form 的模板标签,带有4个参数。此模板标记可与以下基本变量完美配合:

I have a django problem concerning template tags. I have a template tag named modal_form with 4 arguments. This template tag works perfectly with basic variables like:

{% modal_form "clients" contact_form "Contacts" "contact" %}

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

But it doesn't work when i try to filter a variable inside my custom template tag like:

{% modal_form "parameters" form_dict|key:parameter parameter name_dict|key:parameter %}

此自定义过滤器也可以在标记外部完美运行(此过滤器在特定键处获取字典的值)。
我有此错误:

This custom filter works also perfectly outside the tag (this filter get the value of a dict at a specific key). I have this error:


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

Caught VariableDoesNotExist while rendering: Failed lookup for key [form_dict|key:parameter]

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

Maybe i have to write the tag in a different way to support filter inside ?

这是我的代码代码:

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)

我的过滤器代码:

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)

您有什么想法吗?您是否需要更多代码?

Do you have any ideas ? Do you want more code ?

预先感谢您的回答。

推荐答案

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

If your tag and filter works fine separately, try to use with statement:

{% with var_one=form_dict|key:parameter var_two=name_dict|key:parameter %}
    {% modal_form "parameters" var_one parameter var_two %}
{% endwith %}

这篇关于如何在自定义模板标签上使用模板过滤器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆