Flask 蓝图在蓝图中查找静态文件而不是根目录

2024-03-16

我的蓝图应该在根目录中查找静态文件,但事实并非如此。

假设我有一个名为“前端”的蓝图。 'frontend' 仅传入了 template_folder='frontend' 。

即使我将静态文件放在 /app/frontend/static/file.css 下,它也找不到它。它也没有在 /app/static/file.css 中找到它。

控制台网络服务器每次都会对每个 css 或 js 静态文件显示“404”。

但当我打印出 url_maps 时,我确实看到了这个:

<Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>])

我像这样启动了 register_blueprint('frontend') 。

frontend = Blueprint('frontend', __name__,template_folder='templates')

我的视图索引返回:

return render_template('frontend.html', pagination=pagination)

frontend.html只能工作于/app/frontend/templates

如果你把frontend.html at /app/templates它在那里也不起作用。即使您删除“template_folder”参数。

文件结构:

app
-app.py
--frontend
--frontend/templates  contains: (frontend.html) (base.html) (errors/404.html)
--static
--static/css (bootstrap.min.css) (what I want to grab with url_for inside base.html)

1. 模板

每个 Flask 应用程序、蓝图和模块都有jinja_loader https://github.com/mitsuhiko/flask/blob/master/flask/helpers.py#L825。当你的render_template开始查找之前在应用程序中找到的模板,然后在每个蓝图中找到(请参阅获取源 https://github.com/mitsuhiko/flask/blob/master/flask/templating.py#L58 and _iter_loader https://github.com/mitsuhiko/flask/blob/master/flask/templating.py#L66),直到找不到第一个存在的文件。

jinja_loader从对象路径和模板文件夹名称构建,例如,如果您的应用程序、蓝图或模块位于/home/www/myapp (/usr/lib/python3.4/site-packages/myapp) 文件夹和template文件夹比完整模板文件夹将是/home/www/myapp/template (/usr/lib/python3.4/site-packages/myapp/template).

这意味着,如果应用程序模板文件夹中有文件,那么即使您在蓝图中渲染模板,也可以渲染它。此外,如果您在应用程序模板文件夹中没有文件,但在蓝图中的任何文件中,都会渲染钢。因此,对于蓝图,最好使用唯一的模板前缀来避免模板覆盖(falsk_admin -admin/模板前缀)。

例如,对于扩展,它有助于在包中使用模板,并且如果您需要的话,它已经能够在您的应用程序中替换它(如果您只想继承,则需要为模板提供新名称)。

2. 网址规则

规则没有任何蓝图前缀 - 在蓝图中,您只需连接前缀和规则,然后仅使用它。

因此所有 url 规则都将使用现有规则解析(请参阅另一个答案https://stackoverflow.com/a/17146563/880326 https://stackoverflow.com/a/17146563/880326).

您可以有相同的 url 规则描述 (/static and /static)且只有一个端点。

3.静态文件

对于应用程序,默认存在静态文件夹。对于蓝图,您应该添加static_folder争论。但是,如果两个规则具有相同的描述,那么默认情况下您无法从两个规则获取文件(使用小代码 https://stackoverflow.com/a/19179524/880326 can).

对于flask应用,蓝图和模块全静态文件夹依赖形式root_path这取决于__name__争论。

但是,如果您的蓝图没有 url 前缀,最好设置另一个static_url_path以避免错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flask 蓝图在蓝图中查找静态文件而不是根目录 的相关文章

随机推荐

  • Angular 4 setTimeout() 具有可变延迟和等待

    我有一个事件列表timestamp 我想要的是根据timestamp 添加延迟 delay timestamp t 1 timstamp t 我知道这不太适合setTimeout 但是有一个解决方法 如果超时是恒定的 但在我的情况下不是 是
  • 创建 Openstreetmap 提取的 mbtiles 文件的最简单方法?

    我正在创建一个使用在线和离线地图的 iPhone 旅行应用程序 对于离线地图 我希望允许用户下载他们感兴趣的区域 例如伦敦 的 mbtiles 文件 该地图应包含已在 OpenStreetmap 中找到的道路等信息 我知道以下网站http
  • pandas groupby 根据条件替换

    我有一个数据集结构如下 index country city Data 0 AU Sydney 23 1 AU Sydney 45 2 AU Unknown 2 3 CA Toronto 56 4 CA Toronto 2 5 CA Ott
  • Flutter:升级Play商店版本号

    我已经使用 flutter 在 Play 商店上发布了一个应用程序 现在我想上传该应用程序的新版本 我正在尝试更改版本代码 flutter 构建 apk build name 1 0 2 build number 3 或像这样更改 loca
  • 如何在 Java 中检查文件权限(独立于操作系统)

    我有以下代码片段 public class ExampleClass public static void main String args throws FileNotFoundException String filePath args
  • 加载 word2vec 时出现 UnicodeDecodeError 错误

    详细描述 我开始使用词嵌入 并发现了大量有关它的信息 到目前为止 我知道我可以训练自己的词向量或使用以前训练过的词向量 例如 Google 或 Wikipedia 的词向量 这些向量可用于英语 但对我来说没有用 因为我正在处理以下语言中的文
  • WSO2 Identity Server 5.1.0 未在 SAML 响应中返回用户声明

    在尝试新版本的 WSO2 Identity Server 5 1 0 时 我在返回 SAML 响应中的声明时遇到问题 虽然这在 WSO2 IS 5 0 0 SP1 中有效 我已经映射了所需的声明并将它们添加到我的 SP 此外我还配置了 SP
  • 使用 go 处理文件上传

    我最近才开始玩围棋 所以我还是个菜鸟 如果我犯了太多错误 抱歉 我已经尝试解决这个问题很长时间了 但我只是不明白发生了什么 在我的 main go 文件中 我有一个主要函数 func main http HandleFunc handler
  • 使用 FactoryGirl 时不断收到 record_invalid

    很多时候 当我在规范中使用 FactoryGirl 时 我不断收到如下错误 Failure Error f FactoryGirl build my model ActiveRecord RecordInvalid translation
  • 使用“sort”命令按多列对 CSV 文件进行排序

    我有一个类似 CSV 的文件 我想按列优先级对其进行排序 例如SQL 中的 ORDER BY https dev mysql com doc refman 8 0 en sorting rows html 例如 给定以下行 3 1 2 1
  • 如何使用 python urllib 忽略 Windows 代理设置?

    我希望 Python 在使用时忽略 Windows 代理设置urllib 我设法做到这一点的唯一方法是禁用 Internet Explorer 上的所有代理设置 有什么程序化的方式吗 os environ no proxy 不是一个好的选择
  • Symfony 3 根据远程 API 对用户进行身份验证

    我有一个应用程序 其中后端和前端由不同的主机提供服务 并且是两个不同的应用程序 均基于 Symfony 3 其中之一 后端ofc 处理业务逻辑并将用户及其角色保存在其数据库中 后端提供REST API供前端使用 我无法修改后端代码 因为它不
  • 如何选择所有列以及 Oracle 11g 中 CASE 语句的结果?

    我想选择 而不必键入所有单独的列 但我还想包含带有 case 语句的自定义列 我尝试了以下方法 select case when PRI VAL 1 then High when PRI VAL 2 then Med when PRI VA
  • Java MyBatis 存储过程调用带 OUT 参数

    第一个问题 我试图返回一个 OUT 参数 而不是带注释的结果集 首先 这可能吗 如果是的话 人们会怎样做呢 MyBatis 3 0 6 数据库 SQL Server 2008 以下是我在 UserDAO 中调用方法的语法示例 Select
  • Control.ResolveUrl 与 Control.ResolveClientUrl 与 VirtualPathUtility.ToAbsolute

    在解析以波形符 开头的路径时 使用其中一种方法比使用另一种方法有什么好处吗 一般来说 更好的做法是什么 您应该在 html 中发送相对路径还是绝对路径 ResolveUrl 和 ResolveClientUrl 的区别在于 ResolveC
  • MongoDB 记录太多?

    我有一个与 MongoDB 交互的 PHP 应用程序 直到最近 该应用程序运行良好 但几天前我发现该应用程序开始响应非常慢 其中一个收藏已突破 500K 条记录 因此 对该集合的任何查询的 MongCursor 都会超时 我认为 500K
  • 如何通过 ajax 操作向表添加行link

    我是 MVC4 的新手 我遇到了一个问题 当我想在 ajax 中向表中添加一行时 它似乎不是我想要的 这是我的代码 table thead tr th T n h c sinh th th Gi o l vi n th th N m H c
  • 避免序列化 REST 服务中的某些属性

    我有一个 Net应用程序分为客户端和服务器端 服务器提供REST服务 使用WCF 我有这样的服务定义 WebGet UriTemplate Customers id Customer GetCustomerById string id We
  • 对类型为其他模型的属性进行环回验证

    我定义了两个模型 位置和地址 定义如下 address properties address1 type string required true public true dataSource db plural addresses loc
  • Flask 蓝图在蓝图中查找静态文件而不是根目录

    我的蓝图应该在根目录中查找静态文件 但事实并非如此 假设我有一个名为 前端 的蓝图 frontend 仅传入了 template folder frontend 即使我将静态文件放在 app frontend static file css