假设我有一个带有以下背景的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
答案 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" }}