应用程序没有拿起.css文件(flask/python)

Zac*_*ack 80 html css python templates flask

我正在渲染一个模板,我试图用外部样式表设置样式.文件结构如下.

/app
    - app_runner.py
    /services
        - app.py 
    /templates
        - mainpage.html
    /styles
        - mainpage.css
Run Code Online (Sandbox Code Playgroud)

mainpage.html看起来像这样

<html>
    <head>
        <link rel= "stylesheet" type= "text/css" href= "../styles/mainpage.css">
    </head>
    <body>
        <!-- content --> 
Run Code Online (Sandbox Code Playgroud)

我的风格都没有应用.是否与html是我正在渲染的模板这一事实有关?python看起来像这样.

return render_template("mainpage.html", variables..)
Run Code Online (Sandbox Code Playgroud)

我知道这很有效,因为我仍然可以渲染模板.但是,当我试图将样式代码从html的"head"标签中的"样式"块移动到外部文件时,所有样式都消失了,留下了一个简单的html页面.有人看到我的文件结构有任何错误吗?

cod*_*eek 169

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

你的css目录结构应该是这样的:

/app
    - app_runner.py
    /services
        - app.py 
    /templates
        - mainpage.html
    /static
        /styles
            - mainpage.css
Run Code Online (Sandbox Code Playgroud)

请注意,您的/ styles目录应位于/ static下

然后,这样做

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

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

  • 对于 Javascript,将脚本文件添加到 **static** 文件夹。`&lt;script src="{{ url_for('static',filename='javascriptFileName.js') }}"&gt; &lt;/script&gt;` (5认同)
  • 这应该被标记为答案.这个解决方案对我有用,如果不适合你,请告诉我们帮忙.否则标记它.@zack (4认同)
  • 为什么没有将此标记为正确答案?它应该是。 (2认同)

njz*_*zk2 14

在jinja2模板(烧瓶使用)中,使用

href="{{ url_for('static', filename='mainpage.css')}}"
Run Code Online (Sandbox Code Playgroud)

static文件通常是在static文件夹中,不过,除非进行其他配置.


小智 14

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

谷歌浏览器中按下重新加载按钮 (F5) 不会重新加载静态文件。如果您遵循了已接受的解决方案,但仍然没有看到您对 CSS 所做的更改,请按ctrl + shift + R忽略缓存文件并重新加载静态文件。

Firefox 中按下重新加载按钮似乎可以重新加载静态文件。

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


loo*_*bly 8

将以下内容添加到您的代码中:-


 <link
   rel= "stylesheet"
   type= "text/css" 
   href= "{{ url_for('static',filename='name of css file') }}"
  >
Run Code Online (Sandbox Code Playgroud)

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


  1. =>ctrl + shift + R
  2. 边缘=>ctrl + shift + R
  3. 火狐=>ctrl + shift + R


Ste*_*eri 7

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

我什至试图摆脱 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>
Run Code Online (Sandbox Code Playgroud)

您可以使用 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)
Run Code Online (Sandbox Code Playgroud)

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

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

事实上,我在处理文件夹时已经开始遇到这个问题,有时有时没有。这可以一劳永逸地解决问题

html 代码如下所示:

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

Run Code Online (Sandbox Code Playgroud)

这是代码

这里是文件夹的结构