最近开始把flask用在生产上了,其实还算顺利,但是确实有一些坑。
render_template其实很智能了,平常的情况下是没问题的,但是和blueprint结合后,就带来了坑。多方查找,终于在Stack Overflow上找到解决方案,其实也还是没解决。
http://stackoverflow.com/questions/7974771/flask-blueprint-template-folder
先说说描述问题吧。如果你的flask用了blueprint,那如下的目录结构,是很正常的状况。
admin和main是2个blueprint,注意那2个templates文件夹,里面都是有index.html文件的,然后问题就来了。
2个blueprint里面views.py里相应的,应该都会有那么一段代码:
@bp.route('/', methods=['Get']) def index(): return render_template('index.html')
很普通的一段代码,但是你测试一下就晕了,
http://127.0.0.1:5000/admin/ 和 http://127.0.0.1:5000/main/,发现render的都是admin里的templates里index.html!!这个是flask的自动寻址的问题,先找到admin里有index.html了,就返回了!真是啊能不能不那么傻啊!
晕了吧,然后神奇的,为什么static文件夹里的路径,能正常render到呢??flask是傻了啊?
然后根据上面给出的stackoverflow的文章,这个问题是0.8就一直存在了,现在都tm 0.10.1了,还没改过来??
所以没办法了,解决方案就只能按下面的方法了。
目录结构里,把blueprint的名字放进去,好区分。
然后代码里,
#main/views.py @bp.route('/', methods=['Get']) def index(): return render_template('main/index.html')
#admin/views.py @bp.route('/', methods=['Get']) def index(): return render_template('admin/index.html')
fin.