django模板 - 如何动态访问变量?

时间:2014-01-22 10:42:28

标签: python django django-templates

假设我有一个带有以下背景的django模板:

data1 = "this is data1"
data2 = "this is data2"
data_name = "data2"

现在我知道data_name的价值(假设它是"data2"),是否可以使用它来访问变量data2

为了让我的意图更清晰,这就是你可以用Python做的事情

>>> a = 1
>>> b = 2
>>> name = 'a'
>>> locals()[name]
1
>>> name = 'b'
>>> locals()[name]
2

2 个答案:

答案 0 :(得分:2)

使用builtin template filters, tags,这是不可能的。你应该define custom tags来做。

示例:

from django import template

register = template.Library()

@register.simple_tag(takes_context=True)
def get_by_name(context, name):
    return context[name]

示例用法(假设标记在APP_DIR/templatetags/name.py中定义):

>>> from django.template import Template, Context
>>> t = Template('''
... {% load name %} {# Don't forget to load #}
... {% get_by_name data_name %}
... ''')
>>> output = t.render(Context({
...     'data1': 'this is data1',
...     'data2': 'this is data2',
...     'data_name': 'data2',
... }))
>>> print(output)


this is data2

答案 1 :(得分:0)

此自定义过滤器将允许您获取给定上下文变量的给定属性。在您的应用文件夹中,创建一个名为 templatetags 的文件夹 并将此内容插入 templatetags / custom_tags.py

from django import template

register = template.Library()

@register.filter()
def get_key(value, arg):
    if arg in value:
        return value[arg]
    else:
        return ''

下面是在处理表单的模板中使用此示例(在上下文中有一个称为“ form”的变量)。这将获得上下文变量“ form.errors”的属性“ username”。

{% load custom_tags %}

{{ form.errors | get_key:"username" }}