- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是 Flask 的新手,我正准备编写一个更大的应用程序。到目前为止,我已经将功能划分为蓝图。现在我希望能够在初始化期间从蓝图中设置一些全局变量(因此在请求上下文之外)。基本上,我想为某些蓝图自动初始化一个导航列表,因此每个蓝图都需要告诉我的基础应用程序它想要如何命名以及它的默认路线是什么。
我的目标是其他人只需将他们的自定义蓝图放入我的应用程序的“插件”文件夹即可扩展我的应用程序。在这种情况下,我的应用程序不知道它们的路由或名称。它需要在加载特定蓝图时自动学习它...
换句话说:我有一个主应用程序,其中包含一些作为蓝图实现的子应用程序。主应用程序应包含一个导航栏,引用所有子应用程序(蓝图)。蓝图如何在主菜单导航变量中注册一些东西(例如在初始化时)?
(我没有找到从蓝图中访问“self.parent”或应用程序上下文之类的方法。蓝图没有类似构造函数的东西吗?)
最佳答案
so each blueprint needs to tell my base application how it want's to be named and what it's default route is.
当您创建蓝图时,您已经在第一个参数中传递了它的名称:
simple_page = Blueprint('simple_page')
您也可以将url_prefix 值传递给构造函数
simple_page = Blueprint('simple_page', url_prefix='/pages')
I have a main application containing some sub applications implemented as blueprints. The main application should hold a navigation bar referencing to all sub applications (blueprints)
这是一个 python 模块中的示例,您应该将每个蓝图拆分到它自己的模块中。
from flask import Flask, Blueprint, render_template
# ADMIN
admin = Blueprint('admin', __name__, url_prefix='/admin')
@admin.route('/')
def admin_index():
return 'Admin module'
@admin.route('/settings')
def settings():
return 'Admin Settings'
# USER
user = Blueprint('user', __name__, url_prefix='/user')
@user.route('/')
def user_index():
return 'User module'
@user.route('/profile')
def profile():
return 'User Profile'
app = Flask(__name__)
app.register_blueprint(admin)
app.register_blueprint(user)
@app.route('/')
def index():
return render_template('index.html', blueprints=app.blueprints)
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True, port=7000)
Jinja2 模板。请记住将此文件放在根项目的模板文件夹中,这是 Flask 默认搜索模板的地方。
<ul>
{% for bp_name, bp in blueprints.iteritems() %}
<li><a href="{{ bp.url_prefix }}">{{ bp.name }}</a></li>
{% endfor %}
</ul>
从 flask 主应用程序对象,在本例中为 app,您可以访问已注册的蓝图列表; app.blueprints,这是一个 python 字典,其中包含您在构造函数中传递的蓝图的名称。因此,您将此对象传递给您的模板并在其上循环以在菜单中呈现名称和 URL。
Furthermore, what if I want to enable blueprint authors to pass more data in a standardized way (e.g. in which color to display the link to his piece, or whatever...)
由于这是蓝图特定数据,我认为一个好的解决方案是扩展蓝图类并实现自定义方法以标准化方式保存额外数据,然后从主应用程序对象访问。
自定义.py
from flask import Blueprint
class MyBlueprint(Blueprint):
bp_data = {}
def set_data(data):
# here you can make extra task like ensuring if
# a minum group of value were provided for instance
bp_data = data
管理员.py
from .custom import MyBlueprint
admin = MyBlueprint('admin', __name__, url_prefix='/admin')
admin.set_data({'color': '#a569bd', 'enabled': true})
# all the blueprint's routes
...
应用.py
from admin import admin
app = Flask(__name__)
app.register_blueprint(admin)
@app.route('/')
def index():
for a, b in app.blueprints:
print b.bp_data['color']
print b.bp_data['enabled']
...
当然,我的自定义蓝图类需要做更多的工作,比如验证它传递的数据类型,或者如果没有所需的值则抛出错误,比如; title、require_auth 等。从现在开始,您必须定义蓝图必须提供给您的主应用程序才能正常工作的最低要求数据是什么。
关于python - Flask Blueprint Initialization - 初始化一些全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35107053/
我的应用程序中有一个 settings.php 页面,它使用 $GLOBALS 来存储网络应用程序中使用的配置。 例如,他是我使用的一个示例设置变量: $GLOBALS["new_login_page
我正在尝试编译我们在 OS 类上获得的简单操作系统代码。它在 Ubuntu 下运行良好,但我想在 OS X 上编译它。我得到的错误是: [compiling] arch/i386/arch/start
我知道distcp无法使用通配符。 但是,我将需要在更改的目录上安排distcp。 (即,仅在星期一等“星期五”目录中复制数据),还从指定目录下的所有项目中复制数据。 是否有某种设计模式可用于编写此类
是否可以在config.groovy中全局定义资源格式(json,xml)的优先级,而不是在每个Resource上指定?例如,不要在@Resource Annotation的参数中指定它,例如: @R
是否有一些简单的方法来获取大对象图的所有关联,而不必“左连接获取”所有关联?我不能只告诉 Hibernate 默认获取 eager 关联吗? 最佳答案 即使有可能有一个全局 lazy=false(谷歌
我正在尝试实现一个全局加载对话框...我想调用一些静态函数来显示对话框和一些静态函数来关闭它。与此同时,我正在主线程或子线程中做一些工作...... 我尝试了以下操作,但对话框没有更新...最后一次,
当我偶然发现 this question 时,我正在阅读更改占位符文本。 无论如何,我回去学习了占位符。一个 SO 的回答大致如下: Be careful when designing your pl
例如,如果我有这样的文字: "hello800 more text 1234 and 567" 它应该匹配 1234 和 567,而不是 800(因为它遵循 hello 的 o,这不是一个数字)。 这
我一直在尝试寻找一种无需使用 SMS 验证系统即可验证电话号码(Android 和 iPhone)的方法。原因纯粹是围绕成本。我想要一个免费的解决方案。 我可以安全地假设 Android 操作系统会向
解决此类问题的规范 C++ 设计模式是什么? 我有一些共享多个类的多线程服务器。我需要为大多数类提供各种运行时参数(例如服务器名称、日志记录级别)。 在下面的伪 C++ 代码中,我使用了一个日志记录类
这个问题在这里已经有了答案: Using global variables in a function (25 个答案) 关闭 9 年前。 我是 python 的新手,所以可能有一个简单的答案,但我
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Does C++ call destructors for global and class static
我正在尝试使用 Objective-C 中的 ArrayList 的等价物。我知道我必须使用 NSMutableArray。我想要一个字符串列表 (NSString)。关键是我的列表应该可以从我类(c
今天刚开始学习 Android 开发,我找不到任何关于如何定义 Helper 类或将全局加载的函数集合的信息,我会能够在我创建的任何 Activity 中使用它们。 我的计划是创建(至少目前)2 个几
为什么这段代码有效: var = 0 def func(num): print num var = 1 if num != 0: func(num-1) fun
$GLOBALS["items"] = array('one', 'two', 'three', 'four', 'five' ,'six', 'seven'); $alter = &$GLOBALS
我想知道如何实现一个可以在任何地方使用您自己的设置的全局记录器: 我目前有一个自定义记录器类: class customLogger(logging.Logger): ... 该类位于一个单独的
我需要使用 React 测试库和 Jest 在我的测试中模拟不同的窗口大小。 目前我必须在每个测试文件中包含这个beforeAll: import matchMediaPolyfill from 'm
每次我遇到单例模式或任何静态类(即(几乎)只有静态成员的类)的实现时,我想知道这是否实际上不是一种黑客行为,因此只是为了设计而严重滥用类和实例的原则单个对象,而不是设计类和创建单个实例。对我来说,看起
这个问题在这里已经有了答案: Help understanding global flag in perl (2 个回答) 7年前关闭。 my $test = "There was once an\n
我是一名优秀的程序员,十分优秀!