【问题标题】:Is it possible to access the key_name of an object from inside a jinja2 template?是否可以从 jinja2 模板中访问对象的 key_name?
【发布时间】:2011-03-04 05:53:31
【问题描述】:

我正在使用带有 webapp 框架的 python 谷歌应用引擎,用 jinja2 模板代替 django 模板。

我知道您可以从处理程序方法中获取对象的 key_name,方法是这样调用它:

goody = object.key().name()

但是可以从模板逻辑中访问 key_name 吗?像这样?

{% for object in objectList %}
{{object|key_name}}
{% endfor %}

显然这不起作用,但是我可以使用一些过滤器或隐藏属性来获取应用引擎 key_name 从模板内部存储的对象,而无需在处理程序方法内部进行额外的摆弄吗?

【问题讨论】:

    标签: python google-app-engine jinja2


    【解决方案1】:

    Jinja2 允许您执行可调用对象,只需根据此处的文档使用 ():http://jinja.pocoo.org/docs/templates/#other-operators

    所以,这应该可行:

    {% for instance in instance_list %}
       {{ instance.key().name() }}
    {% endfor %}
    

    【讨论】:

    • 我发誓我之前尝试过,但没有成功。但我一定是做错了什么,因为我现在试过了,它工作正常。跟进,这些可调用对象是否有任何开销?如果我需要对很多对象执行此操作,是否将值存储在单独的属性中会更好?
    • 视情况而定,函数调用是 Python 中最昂贵的操作之一。如果这是一段热门代码,那么最好先以智能方式存储它们以避免执行函数。如果这不是经常执行,那很好。小心过早的优化:)
    【解决方案2】:

    您可以在 django 模板中执行 object.key.name 来访问 appengine 数据存储对象的 键名

    通常,您通过object.key().name()访问python代码中的键名

    Django 模板会自动尝试几种可能的方式来解释object.key.name,从而为您提供值。

    【讨论】:

      猜你喜欢
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-23
      • 2014-10-29
      相关资源
      最近更新 更多