【问题标题】:How to show widgets on pages in Flask?如何在 Flask 的页面上显示小部件?
【发布时间】:2012-07-10 19:50:14
【问题描述】:

如何在网站上创建小部件,例如登录表单、动态菜单(从数据库中获取的项目)、网站统计信息?

我知道你可以渲染一个扩展出基础模板的模板。您可以在基本模板中创建这些小部件。

但我不知道如何将逻辑从基本模板移动到我的代码中。例如,块的选择数据。这样的操作当然可以在模板中完成,但在我看来这是一个糟糕的方法。

对不起,我的英语不好。如果你看不懂,我会尝试改写。

【问题讨论】:

  • 我找到了Context Processors。看来我需要。用对了吗?
  • 如果您希望这些值在您渲染的每个模板中始终可用,那么是的,绝对的。

标签: python templates flask widget jinja2


【解决方案1】:

您将使用名为WTForms 的python 库。它可以帮助您编写代码来创建由数据库支持的表单和其他小部件,您可以使用 jinja2 模板来呈现这些小部件。

    class YourForm(Form):
         your_field1 = TextField()
         ....
         your_fieldn = SubmitField()


   @app.route('/')
   def view():
       form=YourForm()
       return render_template('your.html', form=form)

   In your.html
   <form >
     {{ form.your_field1 }}
     ....
     {{ form.your_fieldn }}
   </form>

查看 form validation and rendering 这个烧瓶模式以了解更多信息。

编辑:创建可用于所有模板的全局变量,有两种方法:

  1. 您可以使用global dict of jinja environment。 这是代码:

       app.jinja_env.globals.update({'variable':1})
    
  2. 您可以使用ContextProcessor。代码:

    @app.context_processor
    def inject_variable():
        return dict(variable=1)
    

现在您可以在应用的任何模板中访问variable

【讨论】:

  • 谢谢。我会看到 WTForms。但是你的代码不是我需要的。我想避免在每个视图中向模板添加小部件上下文。
  • @Ticksy 你在谈论全局小部件吗?这样您就可以在一个地方定义它们并且它们可以自动用于模板?
猜你喜欢
  • 1970-01-01
  • 2021-04-10
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
  • 2012-02-19
相关资源
最近更新 更多