Python/Django:简单的Django-Temp

2024-09-27 09:31:15 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我正在用appengine/Python做一个简单的网站。我遇到了一些Django模板问题。在

简而言之,我想用“ShortName”来访问“LongName”。在

源代码:

LongName={"so":"stackoverflow","su":"superuser"}
ShortName=['so','su']

然后我将这两个参数传递给模板。在

在模板中我写道:

^{pr2}$

输出为:

so stands for, su stands for

没有给出错误。LongName.aname不起作用。在

我不知道怎么了。在


Tags: django模板forso源代码网站错误stackoverflow
2条回答

这是在尝试访问LongName['aname'],而不是{}。在

您可能需要编写一个自定义模板标记/过滤器才能使其工作。This Django bug(标记为WONTFIX)有一个简单的实现:

def get(d, key):
    return d.get(key, '')

register.filter(get)

你会用的

^{pr2}$

adding it to your app之后(这个问题的答案说明了如何在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 %}

如果你真的不想添加一个模板标签,那也没那么糟糕!你只需要做一个文件!:)或传入一个额外的变量,Vic's approach将允许您在不接触Python文件的情况下执行此操作。正如他所提到的,它涉及到很多无意义的迭代,但是对于小列表来说,它可以很好地工作。在

Django模板有一个缺点。我以前也遇到过同样的情况。您要做的是迭代LongName中的所有键,并检查要查找的键是否与ShortName匹配。给你:

{% for aname in ShortName %}
  {% for short_version, long_version in LongName %}
    {% if aname == short_version %}
      {{ aname }} stands for {{ long_version }},
    {% endif %}
  {% endfor %}
{% endfor%}

它效率低下,本质上是一个没有意义的O(n^2)机制。然而,在纯Django模板中,没有更好的方法通过变量名引用dict的条目。在

相关问题 更多 >

    热门问题