在jinja2中使用Google App Engine Property的verbose_name

时间:2015-04-30 10:07:02

标签: python google-app-engine jinja2 webapp2

我正在使用Google App Engine开发一个简单的Web应用程序,我想了解如何正确使用属性上的verbose_name选项。

我有一个简单的模型:

from google.appengine.ext import ndb
class Person(ndb.Model):
    name = ndb.StringProperty(required=True, verbose_name='my_name')
    surname = ndb.StringProperty(required=True, verbose_name='my_surname')

然后我有一个非常简单的HTML页面,向用户显示一个表单。调用此页面并使用Jinja2模板引擎作为响应发回。

<html>
<body>
    <form action="/test" method="POST">
        <label>Insert name:</label>
        <input name="my_surname" type="text"/>
        <label>Insert surname:</label>
        <input name="my_surname" type="text"/>
        <button type="submit">Insert!</button>
    </form>
</body>
</html>

我希望能够在html页面中使用属性verbose_name,以便将来能够非常轻松地更改属性名称。正如Google App Engine文档所述,verbose_name是:

  

可在HTML表单框架中使用的可选HTML标签,例如jinja2。

我期望的是这样的事情:

<input name="{{ my_name }}" type="text"/>
<input name="{{ my_surname }}" type="text"/>

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

对于初学者来说,verbose_name的目的是在标签中使用它,而不是输入的名称。如果名称与模型匹配(为了清晰和未来的自动化),它会更好,而且我认为它不会经常变化(如果有的话),因为这需要大量的工作(比如重写所有实体。)

标签是用户在表单中读取的内容,由于含义或使其更清晰,可能会发生变化。这使您可以从代码而不是直接在模板上更改输出,这在自动生成表单时特别有用(这是属性的实际用途)。

因此,至于你的实际问题,它就像:

一样简单
<input name="{{ models.Person.name._verbose_name }}" type="text"/>

这意味着您必须将模型(或至少是模型,Person)作为上下文中的附加值获取模板。