一尘不染

根据用户代理更改Django模板

django

我已经创建了Django网站,但是我喝了Koolaid,并且想要创建iPhone版本。经过深思熟虑后,我提出了两种选择:

  1. 制作其他网站,例如i.xxxx.com。使用Django的站点框架将其绑定到同一数据库中。
  2. 寻找一些中间件时间来读取用户代理,并动态更改模板目录。
    但是,我真的更喜欢选项2。我有所保留,主要是因为Django文档不鼓励动态更改设置。我发现了一个片段,可以满足我的需求。我的主要问题是使它尽可能无缝,我希望它对用户具有自动性和透明性。

还有其他人遇到过同样的问题吗?有人愿意分享他们如何解决制作iPhone版本的Django网站的问题吗?

更新资料

我结合了中间件和调整模板调用。

对于中间件,我使用了minidetector。我喜欢它,因为它可以检测大量的移动用户代理。我要做的就是查看我的请求中的request.mobile。

对于模板调用调整:

 def check_mobile(request, template_name):
     if request.mobile:
         return 'mobile-%s'%template_name
     return template_name

我将其用于任何我拥有两个版本的视图。

去做:

  • 找出如何在render_to_response的扩展版本中访问request.mobile,这样我就不必使用check_mobile(’template_name.html’)
  • 如果不存在移动版本,则使用以前的版本自动回退到常规模板。

阅读 373

收藏
2020-04-03

共1个答案

一尘不染

你可以修改请求并添加一个值,使你的视图知道用户是否在iPhone上,而不是动态更改模板目录。然后包装render_to_response(或用于创建HttpResponse对象的所有内容)以获取模板的iPhone版本,而不是标准html版本(如果它们使用的是iPhone)。

2020-04-03