Mar*_*oma 6 python jinja2 flask
我有一个base.html模板,我想用于所有页面.这base.html包含一个导航
<nav>
<li><a href="./home">Home</a></li>
<li><a href="./foo">bar</a></li>
</nav>
Run Code Online (Sandbox Code Playgroud)
当我处于同一级别(例如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>
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何获得base_url.如果可能的话,我想避免添加base_url到每个render_template电话.而且,如果可能的话,我也想避免base_url手动设置.
Flask/Jinja2如何解决这个问题?
不要担心基本网址; 如果home和foo是在您的应用程序瓶的路线,使用url_for()功能来建立你的网址改为:
<nav>
<li><a href="{{ url_for('home') }}">Home</a></li>
<li><a href="{{ url_for('foo') }}">bar</a></li>
</nav>
Run Code Online (Sandbox Code Playgroud)
另请参阅Flask快速入门文档的URL Building部分:
为什么要使用URL反转功能构建URL
url_for()而不是将它们硬编码到模板中?
- 反向通常比对URL进行硬编码更具描述性.您可以一次更改网址,而无需记住手动更改硬编码网址.
- URL构建可以透明地处理特殊字符和Unicode数据的转义.
- 如果您的应用程序放在URL根之外,例如,在
/myapplication代替/,url_for()妥善处理,对你.
| 归档时间: |
|
| 查看次数: |
5260 次 |
| 最近记录: |