记录flask的一个坑,有关render_template的

最近开始把flask用在生产上了,其实还算顺利,但是确实有一些坑。

render_template其实很智能了,平常的情况下是没问题的,但是和blueprint结合后,就带来了坑。多方查找,终于在Stack Overflow上找到解决方案,其实也还是没解决。

http://stackoverflow.com/questions/7974771/flask-blueprint-template-folder

先说说描述问题吧。如果你的flask用了blueprint,那如下的目录结构,是很正常的状况。

记录flask的一个坑,有关render_template的

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的名字放进去,好区分。

记录flask的一个坑,有关render_template的

然后代码里,

#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.

你可能感兴趣的:(python,flask,blueprint,render_template)