Sus*_*yer 1 python django google-app-engine
嗨,我正在使用App Engine/Python来做一个简单的网站.我有一个Django模板问题的麻烦.
简而言之,我想使用"ShortName"来访问"LongName".
源代码:
LongName={"so":"stackoverflow","su":"superuser"}
ShortName=['so','su']
Run Code Online (Sandbox Code Playgroud)
然后我将这两个参数传递给模板.
在我写的模板中:
{% for aname in ShortName %}
{{ aname }} stands for {{ LongName.aname }},
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
输出是:
so stands for, su stands for
Run Code Online (Sandbox Code Playgroud)
没有错误.该LongName.aname不会工作.
我不知道什么是错的.
这是试图访问LongName['aname'],而不是LongName[aname].
您可能必须编写自定义模板标记/过滤器才能使其生效.这个Django错误(标记为WONTFIX)有一个简单的实现:
def get(d, key):
return d.get(key, '')
register.filter(get)
Run Code Online (Sandbox Code Playgroud)
你会用到哪个
{{ LongName|get:aname }}
Run Code Online (Sandbox Code Playgroud)
之后将其添加到您的应用程序(即SO回答了如何做到这一点的GAE).
您也可以通过传入预先使变量在视图中循环
# 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 %}
Run Code Online (Sandbox Code Playgroud)
如果你真的不想添加模板标签 - 这不是那么糟糕!你只需要制作一个文件!:) - 或传入一个额外的变量,Vic的方法将让你这样做而不用触及Python文件.正如他所提到的,它涉及很多无意义的迭代,但它对小型列表也适用.
| 归档时间: |
|
| 查看次数: |
384 次 |
| 最近记录: |