首页 > 代码库 > FlaskWebDevelopment - Flask模板4 - url_for()在模板中生成链接

FlaskWebDevelopment - Flask模板4 - url_for()在模板中生成链接

这里讲用url_for()来简化在模板中生成链接的操作。以产生静态文件链接为例。

url_for()

直接在模板里写URL,当页面复杂了之后很麻烦,而且可能对代码产生依赖,代码改动后链接就失效了。

URL可以通过Flask提供的url_for()来动态产生。这个函数以视图函数名或者注册视图函数时的端点名作为参数,返回相应的URL。

比如在目前的代码中:

url_for(‘index‘)返回\

url_for(‘index‘, _external=True)返回http://localhost:5000/

一个是相对的链接,应用内部跳转足够了,另一个是绝对的链接。

url_for()还支持传入视图函数的参数,url_for(‘user‘, name=‘john‘, _external=True)返回的就是http://localhost:5000/user/john。如果传入的参数不是视图函数的参数,那么这个参数会被作为一个查询字符串放在链接后,url_for(‘index‘, page=2)返回的是/?page=2

用url_for()产生静态文件链接

web应用不仅仅涉及Python和模板,还需要一些静态文件,像图片,JavaScript文件,CSS等等。

Flask里对静态文件的引用被视为特殊的路由:/static/<filename>,调用url_for(‘static‘, filename=‘css/styles.css‘, _external=True)得到的URL是:http://localhost:5000/static/css/styles.css

默认情况下Flask在应用根目录下的static文件夹里寻找静态文件。可以在这个文件夹里组织好各静态文件的存放路径,可以在里面新增文件夹。

下面在基础模板添加内容,展示如何引入一个favicon.ico图标:

{% block head %}
{{ super() }}
<link rel="shortcut icon" href="http://www.mamicode.com/{{ url_for(‘static‘, filename = ‘favicon.ico‘) }}"
type="image/x-icon">
<link rel="icon" href="http://www.mamicode.com/{{ url_for(‘static‘, filename = ‘favicon.ico‘) }}"
type="image/x-icon">
{% endblock %}

templates/base.html里增加这段,卸载head 块的最后,用super()来保留父模板的内容。

注:

  • 代码到3d tag了
  • 下个是Flask-Moment插件的部分,这个插件做的操作主要是对时间进行格式化,包括自动对client端跨时区情况下的调整,同时提供了一些对时间的计算包括过去了多久之类的函数,实际上是对moment.js在Flask下的封装,暂时感觉没啥意义,决定跳过。这个算坑3。

FlaskWebDevelopment - Flask模板4 - url_for()在模板中生成链接