2017-07-20 59 views
2

我有一個base.html模板,我想用於所有頁面。這base.html包含導航如何使用Flask/Jinja2獲取基礎URL?

<nav> 
    <li><a href="./home">Home</a></li> 
    <li><a href="./foo">bar</a></li> 
</nav> 

這是沒有問題的,當我在同一水平(例如localhost:5000/whatever),但是當我在我的子文件夾(例如localhost:5000/whatever/insert)的聯繫中斷。

這可以通過使相對鏈接絕對是固定的,例如,

<nav> 
    <li><a href="{{base_url}}/home">Home</a></li> 
    <li><a href="{{base_url}}/foo">bar</a></li> 
</nav> 

但是,我不知道如何得到base_url。如果可能的話,我想避免每個render_template呼叫增加base_url。而且,如果可能的話,我也想避免手動設置base_url

Flask/Jinja2如何解決這個問題?

回答

3

不要擔心基地網址;如果homefoo在你的瓶應用路線,使用url_for() function建立你的網址改爲:

<nav> 
    <li><a href="{{ url_for('home') }}">Home</a></li> 
    <li><a href="{{ url_for('foo') }}">bar</a></li> 
</nav> 

另見瓶快速入門文檔的URL Building section

你爲什麼要使用URL反轉功能url_for()建立網址,而不是將它們硬編碼到您的模板中?

  1. 逆向通常比硬編碼URL更具描述性。 您可以一次更改您的網址,而不需要記住 手動更改硬編碼的網址。
  2. URL構建句柄透明地轉義特殊字符和Unicode數據 。
  3. 如果您的應用程序位於URL根目錄之外,例如, /myapplication而不是/url_for()正確地爲您處理。