使用Flask如何在Bootstrap模態框(Modal)里實現表單的渲染和驗證?
目前我用Bootstrap實現了模態框的登錄和註冊效果。但現在我用flask的render_template渲染模板時怎麼調用它?因為Bootstrap要求模態框的代碼要放在文檔的最高層級內(作為body標籤的直接子元素),而flask的render_template函數要求要渲染的html文件要放在templates文件夾內,我最初是將模態框登錄代碼放在單獨的login文件內,期望通過模板繼承實現,但後來發現並沒有成功繼承模態框代碼。請問我現在應該如何組織代碼解決這個矛盾,謝謝了。
下面是login.html的代碼
在使用g保存全局變數login_form的報錯和代碼:
1、模板繼承。你對模板繼承的理解有偏差。模態框和觸發按鈕應該放在一起才能生效。你的觸發按鈕放在基模板的導航欄上,而模態框放在了login.html里。雖然在login.html里重載了基模板的login塊,但你渲染其他頁面(比如說index.html)的時候,並不會載入login.html的內容。
如果登陸註冊按鈕只在主頁(index.html)可見,那就放到主頁里。如果在許多頁面都可見,就需要放在基模板里。這就遇到了第二個問題——form變數如何傳遞?
2、全局變數。因為大部分的頁面都要繼承基模板,所以form變數得是全局可訪問的。我們可以使用g變數存儲form,這樣就不用在每一個視圖裡都實例化form對象。下面的函數生成了login_form變數,可以在基模板里使用。
from flask import Flask, g
# ...
@app.context_processor
def inject_info():
g.form = LoginForm()
return dict(login_form=g.form)
渲染時,模板里的&
※編程界有哪些不懂編程的人也能聽得懂的笑話?
※一名Python程序員會哪些好用的工具?
※matplotlib畫圖如何高質量導入到word中?
※如何用 Qt 開發現代桌面程序?
※tornado為什麼使用epoll的水平觸發模式,而不是邊緣觸發模式?
TAG:Python | Flask | Python框架 | BootstrapTwitter |