在 jinja2 中使用 Google App Engine 属性 的 verbose_name

Using Google App Engine Property's verbose_name in jinja2

我正在使用 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 是:

Optional HTML label to use in web form frameworks like jinja2.

我期望的是这样的:

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

任何帮助将不胜感激。

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

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


因此,对于您的实际问题,它很简单:

<input name="{{ models.Person.name._verbose_name }}" type="text"/>

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