【问题标题】:Flask one Blueprint use wrong Static Folder烧瓶一个蓝图使用错误的静态文件夹
【发布时间】:2020-11-30 07:46:09
【问题描述】:

我目前正在使用 Flask 编写一个 Web 应用程序并使用蓝图。但是,蓝图使用了错误的静态文件夹,尽管配置应该相同。我的错在哪里?

main.py

 self.app = Flask(__name__)
    self.app.register_blueprint(bp_start)
    self.app.register_blueprint(bp_player, url_prefix="/player")
    self.app.register_blueprint(bp_management, url_prefix="/admin")
    self.app.register_blueprint(bp_club, url_prefix="/club")

bp_club.py

from flask import Blueprint, render_template, request, redirect, url_for, session, current_app, flash
from webapp.database import Database


bp_club = Blueprint("bp_club", __name__, static_folder="static")

bp_management.py

from flask import Blueprint, render_template, request, redirect, url_for, session, current_app, flash
from webapp.database import Database
import hashlib

bp_management = Blueprint("bp_management", __name__, static_folder="static")

bp_player.py

from flask import Blueprint, render_template, request, redirect, url_for, session, current_app, flash
from webapp.database import Database
import hashlib

bp_player = Blueprint("bp_player", __name__, static_folder="static")

只有 bp_player 蓝图没有找到静态文件夹:

127.0.0.1 - - [30/Nov/2020 00:25:02] “GET /player/edit/static/css/responsive.css HTTP/1.1”404 -

127.0.0.1 - - [30/Nov/2020 00:34:16] "GET /club/static/script/progressbar.js HTTP/1.1" 200

我在根目录中只有一个静态文件夹。

编辑: 在根目录中是启动程序的 python 文件。 webapp中的所有蓝图

├── Data
├── DB
├── logs
├── venv
│   ├── bin
│   ├── include
│   ├── lib
│   │   
│   └── lib64 -> lib
└── webapp
    ├── __pycache__
    ├── static
    │   ├── css
    │   ├── extra-images
    │   ├── fonts
    │   ├── images
    │   │   ├── avatar
    │   │   └── fancybox
    │   └── script
    └── templates

bp_player.py

from flask import Blueprint, render_template, request, redirect, url_for, 
session, current_app, flash
from webapp.database import Database
import hashlib


bp_player = Blueprint("bp_player", __name__, static_folder="static")



@bp_player.route('/logout/<id>')
def logout(id):
    if session["my_ID"] == id:
        session.pop["my_ID"]
        session.pop["owner"]
    return redirect("/admin/login")

@bp_player.route('/edit/<id>')
def edit(id):
    if session["my_ID"] == id or session["owner"] == 1:
        db = Database(current_app.config["DATABASE"])
        if request.method == "GET":
            where = {"id": id}
            user = db.queryBuilder("select", "player", dict_where=where)
            return render_template("player_edit.html", session=session, 
                                  user=user, nav="player")
    else:
        flash("Please LogIn")
        return redirect("/player/view/" + id, code=303)

模板.html

<link href="static/css/bootstrap.css" rel="stylesheet">
    <link href="static/css/font-awesome.css" rel="stylesheet">
    <link href="static/css/flaticon.css" rel="stylesheet">
    <link href="static/css/slick-slider.css" rel="stylesheet">
    <link href="static/css/fancybox.css" rel="stylesheet">
    <link href="static/style.css" rel="stylesheet">
    <link href="static/css/color.css" rel="stylesheet">
    <link href="static/css/responsive.css" rel="stylesheet">
    <link href="static/css/dark-scheme.css" rel="stylesheet">
    <script type="text/javascript" src="static/script/jquery.js"></script>

适用于 template.html 中的更改

<link href=" {{ url_for('static', filename='css/bootstrap.css') }} " rel="stylesheet">
<link href=" {{ url_for('static', filename='css/awesome.css') }}" rel="stylesheet">
<link href=" {{ url_for('static', filename='css/flaticon.css')  }}" rel="stylesheet">
<link href=" {{ url_for('static', filename='css/slick-slider.css')  }}" rel="stylesheet">
<link href=" {{ url_for('static', filename='css/fancybox.css')  }}" rel="stylesheet">
<link href=" {{ url_for('static', filename='style.css')  }}" rel="stylesheet">
<link href=" {{ url_for('static', filename='css/color.css')  }}" rel="stylesheet">
<link href=" {{ url_for('static', filename='css/responsive.css')  }}" rel="stylesheet">
<link href=" {{ url_for('static', filename='css/dark-scheme.css')  }}" rel="stylesheet">

<script type="text/javascript" src=" {{ url_for('static', filename='script/jquery.js') }} "></script>

【问题讨论】:

  • 您的项目文件夹结构如何?我的猜测是另外两个蓝图在不同的目录中。
  • root-> app.py, webapp -> 静态, 模板, bp_club, bp_player ...
  • 我尝试了以下方法。如果我在 /webapp/static 中更改蓝图中的文件夹 (static_folder=""),则不会发生任何事情。链接调用保持不变。有没有可能它不接受变量?
  • 不,这是不可能的。您以相同的方式创建所有蓝图。为什么 Flask 应该在一个蓝图中接受它而不在另一个蓝图中接受它?我仍然认为问题出在您的项目结构上。如果你在 linux 上工作,你可以使用tree -d 来显示你的项目结构。要么你直接看到问题出在哪里 - 它与其他两个不同 - 要么你在这里发布输出。那我可以看看。
  • 我已经添加了我的目录结构。感谢您的帮助:)

标签: flask blueprint


【解决方案1】:

根据发布的错误和项目结构,我认为问题在于您如何包含responsive.css。也许问题是你的template

看看这个输出。

127.0.0.1 - - [30/Nov/2020 00:34:16] "GET /club/static/script/progressbar.js HTTP/1.1" 200

然后在这个。

127.0.0.1 - - [30/Nov/2020 00:25:02] "GET /player/edit/static/css/responsive.css HTTP/1.1" 404

目录/static/script/ 确实存在,但/edit/static/css/ 不存在,因为我找不到编辑目录。您可能在创建模板时混淆了一些东西,例如包括一个你不打算的变量。我的猜测是玩家有一个编辑视图,这就是它出现在URL 中的原因。

进一步,改变这个

<link href="static/css/bootstrap.css" rel="stylesheet">
<link href="static/css/font-awesome.css" rel="stylesheet">
<link href="static/css/flaticon.css" rel="stylesheet">
<link href="static/css/slick-slider.css" rel="stylesheet">
<link href="static/css/fancybox.css" rel="stylesheet">
<link href="static/style.css" rel="stylesheet">
<link href="static/css/color.css" rel="stylesheet">
<link href="static/css/responsive.css" rel="stylesheet">
<link href="static/css/dark-scheme.css" rel="stylesheet">

<script type="text/javascript" src="static/script/jquery.js"></script>

<link href=" {{ url_for('static', file_name='css/bootstrap') }} " rel="stylesheet">
<link href=" {{ url_for('static', file_name='css/awesome.css') }}" rel="stylesheet">
<link href=" {{ url_for('static', file_name='css/flaticon.css') }} " rel="stylesheet">
<link href=" {{ url_for('static', file_name='css/slick-slider.css') }} " rel="stylesheet">
<link href=" {{ url_for('static', file_name='css/fancybox.css') }} " rel="stylesheet">
<link href=" {{ url_for('static', file_name='css/style.css') }} " rel="stylesheet">
<link href=" {{ url_for('static', file_name='css/color.css') }} " rel="stylesheet">
<link href=" {{ url_for('static', file_name='css/responsive.css') }} " rel="stylesheet">
<link href=" {{ url_for('static', file_name='css/dark-scheme.css') }} " rel="stylesheet">

<script type="text/javascript" src=" {{ url_for('static', file_name='script/jquery.js' }} "></script>

HTH

【讨论】:

  • 编辑目录是来自 bp_player 的子路由。它只存在一个包含所有 css 和 javascript 文件的静态文件夹。我在主帖中添加了信息
  • 谢谢!你能把代码也发到player_edit.html吗?
  • 没有对 css 或 javascript 的引用。都在 template.html
  • 我担心您可能不得不发布所有相关的 *.html 模板。但是,我更新了我的分析器。请看一看。也许这会解决你的问题。
  • 谢谢,它有效。我将正确的版本加载到我的帖子中。有一些缺少括号:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
  • 1970-01-01
相关资源
最近更新 更多