ChatGPT解决这个技术问题 Extra ChatGPT

应用程序未获取 .css 文件(flask/python)[重复]

这个问题在这里已经有了答案:How to serve static files in Flask (24 answers) Closed 7 months ago。

我正在渲染一个模板,我正在尝试使用外部样式表对其进行样式设置。文件结构如下。

/app
    - app_runner.py
    /services
        - app.py 
    /templates
        - mainpage.html
    /styles
        - mainpage.css

mainpage.html 看起来像这样

<html>
    <head>
        <link rel= "stylesheet" type= "text/css" href= "../styles/mainpage.css">
    </head>
    <body>
        <!-- content --> 

我的样式都没有被应用。这与 html 是我正在渲染的模板这一事实有关吗?蟒蛇看起来像这样。

return render_template("mainpage.html", variables..)

我知道这很有效,因为我仍然能够渲染模板。但是,当我尝试将样式代码从 html 的“head”标记中的“样式”块移动到外部文件时,所有样式都消失了,只剩下一个 html 页面。有人看到我的文件结构有任何错误吗?


c
codegeek

您需要设置一个“静态”文件夹(用于 css/js 文件),除非您在 Flask 初始化期间专门覆盖它。我假设你没有覆盖它。

您的 css 目录结构应如下所示:

/app
    - app_runner.py
    /services
        - app.py 
    /templates
        - mainpage.html
    /static
        /styles
            - mainpage.css

请注意,您的 /styles 目录应该在 /static 下

然后,这样做

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

Flask 现在将在 static/styles/mainpage.css 下查找 css 文件


对于 Javascript 将脚本文件添加到 static 文件夹。 <script src="{{ url_for('static',filename='javascriptFileName.js') }}"> </script>
如何在 css 文件中执行相同的操作。 “@import url(static/css/animate.css);”这不起作用并显示 404 错误
当我尝试这个时,我收到错误 Uncaught SyntaxError: unexpected token: 'static'。我正在专门尝试 <img src="{{url_for('static', filename='images/colormap_white.png')}}">。我究竟做错了什么?
n
njzk2

在 jinja2 模板(flask 使用)中,使用

href="{{ url_for('static', filename='mainpage.css')}}"

但是,除非另有配置,否则 static 文件通常位于 static 文件夹中。


不幸的是,这给了我一个错误。 BuildError:('mainpage.css',{},无)
当我尝试这个时,我收到错误 Uncaught SyntaxError: unexpected token: 'static'。我正在专门尝试 <img src="{{url_for('static', filename='images/colormap_white.png')}}">。我究竟做错了什么?
C
Christian Johansen

遵循 codegeek 提供的解决方案后仍有问题:
<link rel= "stylesheet" type= "text/css" href= "{{ url_for('static',filename='styles/mainpage.css') }}">

Google Chrome 中按重新加载按钮 (F5) 不会重新加载静态文件。如果您遵循了公认的解决方案,但仍未看到您对 CSS 所做的更改,请按 ctrl + shift + R 忽略缓存文件并重新加载静态文件。

在 Firefox 中,按下重新加载按钮会重新加载静态文件。

Edge 中按下刷新按钮不会重新加载静态文件。按 ctrl + shift + R 应该忽略缓存文件并重新加载静态文件。但是,这在我的计算机上不起作用。


非常感谢它解决了我在 Google Chrome 中的问题(Ctrl + shift + R)。有什么方法可以自动忽略缓存的文件?
该死的我不知道css文件会被缓存并且不会重新加载。非常感谢。
我正在使用 Firefox,Ctrl + shift + R 就是这样。
D
Devesh Kumar Singh

我已经阅读了多个线程,但没有一个能解决人们描述的问题,我也经历过。

我什至尝试离开 conda 并使用 pip 升级到 python 3.7,我尝试了所有建议的编码,但没有一个是固定的。

这就是为什么(问题):

默认情况下,python/flask 在文件夹结构中搜索静态和模板,例如:

/Users/username/folder_one/folder_two/ProjectName/src/app_name/<static>
 and 
/Users/username/folder_one/folder_two/ProjectName/src/app_name/<template>

您可以使用 Pycharm(或其他任何东西)上的调试器自行验证并检查应用程序上的值(app = Flask(name))并搜索 teamplate_folder 和 static_folder

为了解决这个问题,您必须在创建应用程序时指定值,如下所示:

TEMPLATE_DIR = os.path.abspath('../templates')
STATIC_DIR = os.path.abspath('../static')

# app = Flask(__name__) # to make the app run without any
app = Flask(__name__, template_folder=TEMPLATE_DIR, static_folder=STATIC_DIR)

路径 TEMPLATE_DIR 和 STATIC_DIR 取决于文件应用程序所在的位置。就我而言,请参见图片,它位于 src 下的文件夹中。

您可以根据需要更改模板和静态文件夹并在应用程序上注册 = Flask...

事实上,我在搞乱文件夹时已经开始遇到问题,有时工作有时不工作。这一劳永逸地解决了问题

html 代码如下所示:

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

This the code

Here the structure of the folders


L
Loop_Assembly

如果您已经像上面那样链接了您的 css 并且它不起作用,那么您可以执行以下操作:-

Chrome => ctrl + shift + R Edge => ctrl + shift + R Firefox => ctrl + shift + R


H
Hackytech

如果上述任何方法都不起作用并且您的代码是完美的,那么请尝试通过按 (Ctrl + F5) 对 windows 和 mac 进行刷新(按住 Cmd 和 Shift,然后按 R [Command + Shift + R])。它将清除所有缓存,然后重新加载文件。它对我有用。


谢谢,这有帮助!在 Mac 上,它的 Command + Shift + R
哦,太好了,也会编辑我的帖子添加mac命令
我经常找到 mac thx 的命令
I
Imran

我现在正在运行 1.0.2 版的烧瓶。上面的文件结构对我不起作用,但我找到了一个,如下:

     app_folder/ flask_app.py/ static/ style.css/ templates/
     index.html

(请注意,'static' 和 'templates' 是文件夹,它们的名称应该完全相同。)

要检查您正在运行的烧瓶版本,您应该在终端中打开 Python 并相应地键入以下内容:

导入烧瓶烧瓶--版本


对不起,但你能准确描述一下你做了什么吗?我正在努力解决同样的问题!
s
sɐunıɔןɐqɐp

还有一点要补充。连同上述赞成的答案,请确保将以下行添加到 app.py 文件中:

app = Flask(__name__, static_folder="your path to static")

否则烧瓶将无法检测到静态文件夹。


G
Gopi P

烧瓶项目结构不同。正如您在问题中提到的,项目结构是相同的,但唯一的问题是样式文件夹。 Styles 文件夹必须在 static 文件夹中。

static/styles/style.css

S
SW Jeong

还有一点要添加到这个线程。

如果您在 .css 文件名中添加下划线,那么它将不起作用。


A
Archit K

奇怪的是,对我来说有一个“静态”文件夹以及将我的 .css 文件命名为“main.css”的作品。如果我有任何其他文件名 - 例如“styles.css”或“mainstyle.css”,则样式在呈现时不会反映在页面上。


T
Tompis14

如果您想在 Flask 中使用蓝图时连接 html 和 css:

确保您已设置模板和静态文件夹: core = Blueprint('core', name, template_folder='templates', static_folder='static') 在您的 href 代码中添加 url_for:


C
Community

我很确定它类似于 Laravel 模板,这就是我的做法。

<link rel="stylesheet" href="/folder/stylesheets/stylesheet.css" />

参考:CSS file pathing problem

Simple flask application that reads its content from a .html file. External style sheet being blocked?


不会对你投反对票,但为了你的启迪,Laravel 是 PHP 而 Flask 是 Python。它们的工作方式不同。它们具有非常不同的目录结构和行为。
要导入静态文件,我们需要将这些静态文件放入静态文件夹中。您提供的文件夹结构适用于普通的 HTML 文件。但不是用 Flask