【发布时间】:2016-11-03 16:13:22
【问题描述】:
我们有一个融合了flask和django的应用程序,它使用mako作为模板引擎,我们希望在用户使用移动设备时在某些视图中提供替代模板,目前我所做的是我的模板文件夹中有两个子文件夹并覆盖渲染方法以获取适当的 mako
templates
mobile
base.mako
index.mako
desktop
base.mako
index.mako
results.mako
因此,例如,如果我调用 render("index.mako") 并且请求具有 request.mobile==True ,那么它会将文件 url 转换为 mobile/index.mako ,如果 'mobile/{some template}.mako' 没有'如果不存在,它将自动获取“桌面/{some template}.mako”,因为桌面存在所有模板。
现在问题来自于继承,假设我有以下模板
results.mako
<%inherit file="base.mako" />
<select>
------
</select>
我用 request.mobile==True 调用 render("results.mako") ,路径将转换为 desktop/results.mako (因为 results.mako 不存在用于移动设备)并且 results.mako 将从 'desktop/base.mako' 继承(因为它使用相对路径)而不是正确的 'mobile/base.mako' 应该使用,因为它是一个移动设备并且 mobile/base.mako 存在。
关于如何以优雅的方式解决这个问题(避免在 mako 中使用 ifs)有什么想法吗?也许通过改变 dir make 认为模板所在的位置?
【问题讨论】: