不确定是否有人有使用django专门为移动设备呈现模板的良好解决方案的经验。
我编写了一个中间件请求处理器,它使用正则表达式来检测它是否是移动浏览器。我目前正在为请求设置一个布尔属性,以便我可以在管道中进一步使用它。但实际上我的业务逻辑是一样的,我只想使用一组不同的模板。
我有没有办法在中间件处理器中的settings.TEMPLATE_DIRS中添加新的模板目录,以便移动用户可以获得我选择重写的视图,但其他所有内容都会回退到默认模板目录。但我需要确保它不会在请求之间持续存在。
如果我添加了一个目录,设置会在请求之间继续保留吗?
..如果是这样,这是正确的解决方案(检查浏览器代理,添加一个额外的模板文件夹,然后在每个请求结束时删除它)?
答案 0 :(得分:2)
动态修改模板搜索路径是处理此问题的好方法。定义自己的模板加载器并将其添加到settings.py中的TEMPLATE_LOADERS并不困难。其中最棘手的部分是处理您可能在多线程环境中运行的事实,并且您没有办法将请求直接传递给模板加载器。
解决方法是存储请求,标志或仅添加到线程局部变量中的路径的目录,并从自定义模板加载器引用该线程局部变量。这是关于创建模板加载器的blog post,我可以保证这很简单并且有效。这是even better one关于完全按照您的需要做的事情。
我想我没有特别指出你可能不想尝试更改settings.TEMPLATE_DIRS每个请求,你将获得最好的结果。