您好,我正在使用 App Engine/Python 制作一个简单的网站。我遇到了 Django 模板问题。
简而言之,我想使用“ShortName”来访问“LongName”。
源代码:
LongName={"so":"stackoverflow","su":"superuser"}
ShortName=['so','su']
然后我将这两个参数传递给模板。
在我写的模板中:
{% for aname in ShortName %}
{{ aname }} stands for {{ LongName.aname }},
{% endfor %}
输出是:
so stands for, su stands for
没有报错。 LongName.aname 将不起作用。
我不知道出了什么问题。
请您参考如下方法:
这是试图访问 LongName['aname'],而不是 LongName[aname]。
您可能必须编写自定义模板标签/过滤器才能使其正常工作。 This Django bug (标记为 WONTFIX)有一个简单的实现:
def get(d, key):
return d.get(key, '')
register.filter(get)
你会用到
{{ LongName|get:aname }}
在adding it to your app之后(SO 答案显示了如何在 GAE 上执行此操作)。
您还可以通过传入预先创建一个变量以在 View 中循环
# in view
name_abbrevs = [(k, LongName[k]) for k in ShortName]
# in template
{% for short_name, long_name in name_abbrevs %}
{{ short_name }} stands for {{ long_name }}
{% endif %}
如果您真的不想添加模板标签——那也不错!你只做一个文件! :) -- 或者传入一个额外的变量,Vic's approach将让您在完全不接触 Python 文件的情况下执行此操作。正如他所提到的,它涉及大量无意义的迭代,但它适用于小型列表。
