如何在css文件中使用flask url_for?

问题描述 投票:1回答:3

我用html和css的烧瓶。如果可能的话:

  <img src="{{ url_for('static', filename='images/planets.jpeg' ) }}">

我在这里写什么来处理相同的图像?

.bgimg-1 {
   background-image: url('https://i.ytimg.com/vi/J9QOB6hSI-c/maxresdefault.jpg');
   min-height: 100%; }

解决方案看起来应该类似于:

.bgimg-1 {
   background-image: url('{{ url_for('static', filename='images/planets.jpeg' ) }}');
   min-height: 100%; }

谢谢 :)

html css flask jinja2
3个回答
2
投票

您不能直接在CSS文件中使用Jinja,因为您通常不将其渲染为模板,但有3种替代方法可以满足您的需求:

方法1

在CSS文件中使用正确的相对路径:

background: url("/static/images/bg.jpg") no-repeat 0px 0px;

方法2

将你的background行放入模板:

<style>
    background: url("{{ url_for('static',filename='images/bg.jpg') }}") no-repeat 0px 0px;
</style>

方法3

在模板中定义CSS变量:

<style>
    :root {
        --background-url: {{ url_for('static', filename='images/bg.jpg') }}
    }
</style>

然后在CSS文件中使用它:

background: url("var(--background-url)") no-repeat 0px 0px;

2
投票

你通过/static/css/style.css静态服务css。当你这样做时,Flask不会使用Jinja来解析CSS文件,就像它是一个模板一样。

但是,如果你有一个路线(例如@app.route('/css/<file>')),那么你可以使用render_template()方法渲染CSS文件,好像它是一个jinja模板,然后解析jinja指令(例如{{url_for()}}


2
投票

您只需在url_for函数中引用生成的URL即可。

举个例子:

.bgimg-1 {
   background-image: url('/static/images/planets.jpeg');
   min-height: 100%;
}

另请注意,CSS本身可以引用:

<link rel="stylesheet" href="{{ url_for('static', filename='css/planets.css') }}">

更新:

或者,您可以将Jinja2嵌入样式属性中。例如:

<body style="background-image: url({{ url_for('static', filename='images/planets.jpeg') }});">
<!-- HTML TEMPLATE CODE -->
</body>
© www.soinside.com 2019 - 2024. All rights reserved.