【问题标题】:Python Flask - url_for{} not accessing static folder [duplicate]Python Flask - url_for{} 未访问静态文件夹 [重复]
【发布时间】:2024-04-21 21:05:01
【问题描述】:

目录结构如下:

Flask_project
-env
-src
--app2.py
-static
--css
---main.css
-templates
--base.html
--index.html
-app.py

如果我在主文件夹中使用 app.py 加载页面,则 main.css 文件可以正常加载:python app.py。这适用于以下文件:

from flask import Flask, render_template, url_for # import

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html') 

if __name__ == "__main__":
    app.run(debug=True)

但是,如果我使用位于 \src 文件夹中的 python3 src\app2.py 加载 app2.py,如下所示,并重定向 template_folder:

from flask import Flask, render_template, url_for # import

app = Flask(__name__, template_folder='../templates')

@app.route('/')
def index():
    return render_template('index.html') 

if __name__ == "__main__":
    app.run(debug=True)

我无法加载 css\main.css 文件夹,我收到以下错误:

"GET /css/main.css HTTP/1.1" 404 -

我不明白为什么将 app_whatever.py 文件放在子目录(在本例中为 \src)会导致无法找到 main.css 文件?

参考base.html如下:

<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <link rel="stylesheet" href="{{url_for('static', filename='css/main.css') }}">
        {% block head %}{% endblock %}
    </head>
    <body>
        {% block body %}
        {% endblock %}
    </body>
</html>

index.html 是:

{% extends 'base.html' %}

{% block head %}

{% endblock %}

{% block body %}

<h1> Template </h1>
    
{% endblock %}

【问题讨论】:

    标签: python css flask directory


    【解决方案1】:

    正如您的second question 中所述,您需要定义您的static-文件夹的位置:

    app = Flask(__name__, template_folder='../templates', static_folder='../static')
    

    【讨论】: