这个问题在这里已经有了答案: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 页面。有人看到我的文件结构有任何错误吗?
您需要设置一个“静态”文件夹(用于 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 文件
在 jinja2 模板(flask 使用)中,使用
href="{{ url_for('static', filename='mainpage.css')}}"
但是,除非另有配置,否则 static
文件通常位于 static
文件夹中。
Uncaught SyntaxError: unexpected token: 'static'
。我正在专门尝试 <img src="{{url_for('static', filename='images/colormap_white.png')}}">
。我究竟做错了什么?
遵循 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
应该忽略缓存文件并重新加载静态文件。但是,这在我的计算机上不起作用。
Ctrl + shift + R
就是这样。
我已经阅读了多个线程,但没有一个能解决人们描述的问题,我也经历过。
我什至尝试离开 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" >
Here the structure of the folders
如果您已经像上面那样链接了您的 css 并且它不起作用,那么您可以执行以下操作:-
Chrome => ctrl + shift + R Edge => ctrl + shift + R Firefox => ctrl + shift + R
如果上述任何方法都不起作用并且您的代码是完美的,那么请尝试通过按 (Ctrl + F5) 对 windows 和 mac 进行刷新(按住 Cmd 和 Shift,然后按 R [Command + Shift + R])。它将清除所有缓存,然后重新加载文件。它对我有用。
我现在正在运行 1.0.2 版的烧瓶。上面的文件结构对我不起作用,但我找到了一个,如下:
app_folder/ flask_app.py/ static/ style.css/ templates/
index.html
(请注意,'static' 和 'templates' 是文件夹,它们的名称应该完全相同。)
要检查您正在运行的烧瓶版本,您应该在终端中打开 Python 并相应地键入以下内容:
导入烧瓶烧瓶--版本
还有一点要补充。连同上述赞成的答案,请确保将以下行添加到 app.py
文件中:
app = Flask(__name__, static_folder="your path to static")
否则烧瓶将无法检测到静态文件夹。
烧瓶项目结构不同。正如您在问题中提到的,项目结构是相同的,但唯一的问题是样式文件夹。 Styles 文件夹必须在 static 文件夹中。
static/styles/style.css
还有一点要添加到这个线程。
如果您在 .css 文件名中添加下划线,那么它将不起作用。
奇怪的是,对我来说有一个“静态”文件夹以及将我的 .css 文件命名为“main.css”的作品。如果我有任何其他文件名 - 例如“styles.css”或“mainstyle.css”,则样式在呈现时不会反映在页面上。
如果您想在 Flask 中使用蓝图时连接 html 和 css:
确保您已设置模板和静态文件夹: core = Blueprint('core', name, template_folder='templates', static_folder='static') 在您的 href 代码中添加 url_for:
我很确定它类似于 Laravel 模板,这就是我的做法。
<link rel="stylesheet" href="/folder/stylesheets/stylesheet.css" />
不定期副业成功案例分享
<script src="{{ url_for('static',filename='javascriptFileName.js') }}"> </script>
Uncaught SyntaxError: unexpected token: 'static'
。我正在专门尝试<img src="{{url_for('static', filename='images/colormap_white.png')}}">
。我究竟做错了什么?