2012-07-10 51 views
2

如何在網站上創建小部件,如登錄表單,動態菜單(取自數據庫的項目),網站統計信息?如何在Flask的頁面上顯示小部件?

我知道你可以渲染一個將擴展出基本模板的模板。在基本模板中,您可以創建這些小部件。

但我不知道如何將邏輯從基本模板移動到我的代碼。例如,塊的選擇數據。這樣的行爲當然可以在模板中完成,但在我看來這將是一個糟糕的方法。

對不起,我的英語不好。如果你不明白,我會嘗試重述。

+0

我找到了[Context Processors](http://flask.pocoo.org/docs/templating/)。看來我需要。使用它是否正確? – Ticksy 2012-07-10 21:09:17

+1

如果您希望這些值始終在您渲染的每個模板中都可用,那麼絕對是。 – 2012-07-11 04:16:49

回答

2

你會使用一個名爲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

+0

謝謝。我會看到WTForms。但是你的代碼並不是我所需要的。我想避免在每個視圖中爲模板添加小部件上下文。 – Ticksy 2012-07-10 21:07:50

+0

@Ticksy你在談論全球小部件嗎?這樣你就可以在一個地方定義它們,並且它們可以自動用於模板? – codecool 2012-07-11 06:02:16

+0

是的,就是這樣。 – Ticksy 2012-07-11 09:00:07

相關問題