首页 > 代码库 > 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()在模板中生成链接