我对如何利用烧瓶中的蓝图感到困惑。让我告诉你我想做什么:
首先,我的项目必须具有以下结构:
run.py
application
-- __init.py__
-- admin
-- -- templates
-- -- -- index.html
-- -- static
-- -- -- img
-- -- -- -- logo.png
-- -- models.py
-- -- views.py
-- landing
-- -- templates
-- -- -- index.html
-- -- static
-- -- -- img
-- -- -- -- logo.png
-- -- models.py
-- -- views.py
我想要做的是定义两个蓝图,以便在我访问/admin
application/admin/templates/index.html
页面(和相应的徽标)时加载,但是当我访问/landing
时<{1}}页面(以及相应的徽标)已加载。
这应该不是那么困难但我出于某种原因感到困惑。
感谢任何帮助!
修改
更具体地说,以下蓝图和jinja2的使用是否有意义?它似乎没有按预期工作......
application/landing/templates/index.html
答案 0 :(得分:5)
以下文件可以帮助您实现目标:
from application.admin import admin
from application.landing import landing
from flask import Flask
app = Flask(__name__)
# Register the blueprints
app.register_blueprint(admin)
app.register_blueprint(landing)
app.debug = True
print app.url_map
app.run(host='0.0.0.0')
from flask import Blueprint
landing = Blueprint('landing', __name__, template_folder='templates', url_prefix='/landing', static_folder='static')
from application.landing import views
from flask import Blueprint
admin = Blueprint('admin', __name__, template_folder='templates', url_prefix='/admin', static_folder='static')
from application.admin import views
from application.landing import landing
from flask import render_template
@landing.route('/')
def get_landing_index():
return render_template('landing/index.html')
from application.admin import admin
from flask import render_template
@admin.route('/')
def get_admin_index():
return render_template('admin/index.html')
您应该获得以下路线:
<Rule '/landing/' (HEAD, OPTIONS, GET) -> landing.get_landing_index>,
<Rule '/admin/' (HEAD, OPTIONS, GET) -> admin.get_admin_index>,
<Rule '/landing/static/<filename>' (HEAD, OPTIONS, GET) -> landing.static>,
<Rule '/admin/static/<filename>' (HEAD, OPTIONS, GET) -> admin.static>,
<Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>]
但请注意,您必须更改存储模板的路径。模板位于:
重复模板文件夹中的蓝图名称可以缓解here中描述的错误/功能。如果模板共享相同的名称(例如index.html
),即使它们位于不同的蓝图中,其中一个也始终优先。有关上述链接的更多信息。
有关如何在与蓝图一起使用时链接模板中的静态文件的信息,/application/admin/templates/admin/index.html
可能如下所示:
<!DOCTYPE html>
<html>
<head>
<title>Admin page</title>
</head>
<body>
<h1>Welcome to Admin</h1>
<img src="{{ url_for('admin.static', filename='cat.jpg') }}"/>
</body>
</html>
文件cat.jpg
将在/application/admin/static/cat.jpg
中提供。对于landing
,模板/application/landing/templates/landing/index.html
可以采用相同的方式制作:
<!DOCTYPE html>
<html>
<head>
<title>Landing page</title>
</head>
<body>
<h1>Welcome to Landing</h1>
<img src="{{ url_for('landing.static', filename='cat.jpg') }}"/>
</body>
</html>
文件cat.jpg
将存储在/application/landing/static/cat.jpg
中。无需重复/static/
下方的蓝图名称,因为url_for()
已将其作为参数。
最后,不要忘记在需要的地方添加__init__.py
个文件。