Flask 烧瓶蓝图:如何使用?

Flask 烧瓶蓝图:如何使用?,flask,Flask,我对如何利用烧瓶中的蓝图有点困惑。让我告诉你我想做什么: 首先,我的项目必须具有以下结构: run.py application -- __init.py__ -- admin -- -- templates -- -- -- index.html -- -- static -- -- -- img -- -- -- -- logo.png -- -- models.py -- -- views.py -- landing -- -- templates -- -- -- index.htm

我对如何利用烧瓶中的蓝图有点困惑。让我告诉你我想做什么:

首先,我的项目必须具有以下结构:

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
时,加载
应用程序/admin/templates/index.html
页面(和相应的徽标),但当我访问
/landing
时加载
应用程序/landing/templates/index.html
页面(和相应的徽标)加载

这应该没那么难,但我出于某种原因感到困惑

感谢您的帮助

编辑

更具体地说,下面使用蓝图和jinja2有意义吗?它似乎不像预期的那样工作

    $.backstretch([
        "{{ url_for('landing.static' , filename='img/bg/01.jpg') }}", 
        "{{ url_for('landing.static' , filename='img/bg/02.jpg') }}",
        "{{ url_for('landing.static' , filename='img/bg/03.jpg') }}"
    ], {duration: 3000, fade: 750});

    127.0.0.1 - - [31/Aug/2015 16:47:42] "GET /%7B%7B%20url_for('landing.static'%20,%20filename='img/bg/01.jpg')%20%7D%7D HTTP/1.1" 404 -
    127.0.0.1 - - [31/Aug/2015 16:47:42] "GET /%7B%7B%20url_for('landing.static'%20,%20filename='img/bg/02.jpg')%20%7D%7D HTTP/1.1" 404 -
    127.0.0.1 - - [31/Aug/2015 16:47:42] "GET /%7B%7B%20url_for('landing.static'%20,%20filename='img/bg/03.jpg')%20%7D%7D HTTP/1.1" 404 -

以下文件应帮助您实现所需:

run.py 应用程序/landing/init.py 应用程序/admin/init.py 应用程序/landing/views.py application/admin/views.py 您应该获得以下路线:

<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>]
文件
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\u for()
已将其作为参数获取


最后,不要忘记在需要的地方添加
\uuu init\uuuuy.py
文件。

你能发布你已经尝试过的代码吗?没关系。下面的链接帮助我解决了这个问题:你的问题有点不清楚,你能把问题说得更具体一点吗嗨,谢谢你的回答(我会把你的答案标记为正确-尽管我已经根据提供的链接解决了)。但是,我不知道如何在javascript中使用blueprints/jinja2。你能给我一些帮助吗?请参阅我的编辑。这取决于您如何提供JS文件:如果它们是静态JS文件(即在交付之前未呈现),则应使用绝对URL(例如
/landing/static/img/bg/01.jpg
-请注意前面的
/
)。否则,添加逻辑来预处理JS脚本,以呈现它们包含的Jinja2标记(并在JS文件中使用
{{url\u for()}}
函数),方法是通过专用端点为它们提供服务。我认为这两种方法都是有效的,但我更喜欢第一种。我更喜欢
解决方案的
url\u,但同样,它看起来不起作用。。。。我已使用调试器的输出更新了编辑。如果你不介意的话,请看一看。正如我所说的,你需要创建一个专用的端点来服务你的JS文件,就像它们是模板一样(因为它们毕竟是模板):创建一个
/application/landing/templates/landing/JS
文件夹,把你的JS文件放进去(例如
index.JS
)并在提供JS之前创建一个端点来呈现JS(在
/application/landing/views.py
中):@landing.route('/JS/')def get_rendered_JS(filename):返回呈现模板('landing/JS/{filename}.format(filename=filename)),然后将您的JS文件引用为
/landing/JS/index.JS
,抱歉,我只是想说清楚:我已经让它工作了(就在你回答之前)。换句话说,我在html文件(模板)中大量使用了
{{url\u for()}
,但是我不能在javascript文件中使用它(正如您在上面的调试输出中看到的)。所以,现在,我的问题非常具体。一般来说,这与蓝图无关。有什么想法吗?
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>]
<!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>
<!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>