Skip to main content
 首页 » 编程设计

python /Django : Simple Django Template

2025年05月04日33over140

您好,我正在使用 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 文件的情况下执行此操作。正如他所提到的,它涉及大量无意义的迭代,但它适用于小型列表。