代码之家  ›  专栏  ›  技术社区  ›  The Fool

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

  •  1
  • The Fool  · 技术社区  · 6 年前

    我使用的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%; }
    

    谢谢:)

    3 回复  |  直到 6 年前
        1
  •  2
  •   Grey Li    5 年前

    你不能直接在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
  •  2
  •   poundifdef    6 年前

    您正在静态地为css服务,通过 /static/css/style.css 是的。当您这样做时,flask不会像解析模板一样使用jinja来解析css文件。

    然而,如果你有一条路线(如 @app.route('/css/<file>') )然后可以使用render_template()方法将css文件呈现为一个jinja模板,然后解析jinja指令(例如 {{url_for()}} )

        3
  •  2
  •   0xack13    6 年前

    您只需在 url_for 功能。

    例如:

    .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>