如何使用多组模板组织Flask应用程序的代码

时间:2011-11-01 00:34:20

标签: python flask jinja2

我正在使用Flask编写应用程序,我想为桌面和移动浏览器生成不同的代码。恕我直言,保持应用程序代码相同是一个好主意,并在模板级别推动在堆栈中提供不同内容的问题 - 所以它基本上成为为两个用例编写两组模板并找到方法的问题选择在每个请求中使用的正确的一个。 我正在使用Flask的默认Jinja2模板引擎。

我应该提一下,我没有使用Flask的经验,而且我在编写代码时正在学习它 - 我也把它作为一个练习:)

您将使用什么机制来解决此问题并尽可能保持源代码清洁?

2 个答案:

答案 0 :(得分:4)

回复自己:)

我最终使用了这个解决方案:

import flask
# patch flask.render_template()
_render_template = flask.render_template
def _my_render_template(*args, **kwargs):
    if detect_mobile_browser(flask.request.user_agent.string):
        args = ('m/' + args[0],) + args[1:]
    return _render_template(*args, **kwargs)
flask.render_template = _my_render_template

到目前为止它似乎有效,我只是将“移动模板”放在m/子目录中。

答案 1 :(得分:4)

我想指出一个可能有些不同的方向。

许多设计人员和开发人员(包括我)都没有看到网页设计的未来,将模板分开,但是有一个模板可以动态响应其环境。也就是说,它以最适合给定显示的方式重新排列其元素。

它被称为responsive design。我知道这可能不是你一直在寻找的解决方案,但它可能会变得更好。