6

我的应用程序有很多使用同一组静态文件的路由。

我必须像这样为每条路线定义它们:

css_reset = url_for("static", filename="reset.css")
css_main = url_for("static", filename="main.css")
css_fonts = url_for("static", filename="fonts.css")

js_jquery = url_for("static", filename="jquery-1.7.2.min.js")
js_main = url_for("static", filename="main.js")

然后,当我渲染模板时,它看起来像这样:

return render_template("person.html",
                       css_main=css_main,
                       css_reset=css_reset,
                       css_fonts=css_fonts,
                       js_jquery=js_jquery,
                       js_main=js_main)

我是烧瓶和 python 的新手,我认为我正在做的事情有点荒谬。我可以在一个地方定义它们,然后只在我的模板中使用,而不在每个路由定义中复制和粘贴吗?

4

3 回答 3

17

每次您可以在 Jinja 中将它们注册为全局变量时,而不是将这些变量传递给您的模板:

app.jinja_env.globals.update(
    css_reset=url_for("static", filename="reset.css"),
    css_main=url_for("static", filename="main.css"),
    ...
)

或者,更好的是,注册一个辅助函数:

app.jinja_env.globals['static'] = (
    lambda filename: url_for('static', filename=filename))

然后在您的模板中:

<link ref=stylesheet href="{{ static('main.css') }}">
于 2012-07-30T08:41:59.067 回答
12

最简单的方法是使用Flask-Assets扩展。

    from flask.ext.assets import Environment, Bundle
    assets = Environment(app)
    css_all = Bundle('reset.css','main.css','fonts.css')
    assets.register('css_all',css_all)

在模板中:

    {% assets %}
    <link rel="stylesheet" href="{{ ASSET_URL }}">
    {% endassets %}

您还可以使用此扩展的某些选项压缩 css 和 js 文件以用于生产。

由于您需要在许多模板中使用这些文件,因此在 base.html 模板中定义它们,并在每个模板中扩展该 base.html。您不必一次又一次地编写它们。

于 2012-07-30T09:25:56.503 回答
-1

你不需要这样做, url_for 是用来生成 url 的(这样当你改变一个 url 的结构时,你不需要改变它十几次)。您可以直接在模板中使用静态文件的固定路径。只需将您的静态文件放在 /static 文件夹中并在您的模板中使用它:

<link rel="stylesheet" href="{{ YOUR_SITE_URL_HERE+'/static/main.css' }}">

您可能希望在 config.py 中定义一个变量并在模板中使用它,而不是直接将 YOUR_SITE_URL 替换为您网站的 url:{{ config['SITE_URL']+'/static/main.css' }}

于 2012-07-29T14:03:02.143 回答