【发布时间】:2010-09-14 22:23:06
【问题描述】:
我做了一个 Django 网站,但我喝了 Koolaid,我想制作一个 IPhone 版本。经过深思熟虑,我想出了两个选择:
- 创建一个完整的其他网站,例如 i.xxxx.com。使用 Django 的站点框架将其绑定到同一个数据库中。
- 找一些中间件读取用户代理,动态更改模板目录。
不过,我真的更喜欢选项 #2;我有一些保留,主要是因为 Django 文档discourages changing settings on the fly。我找到了一个snippet 可以做我想做的事。我的主要问题是让它尽可能无缝,我希望它对用户来说是自动的和透明的。
还有其他人遇到过同样的问题吗?有人愿意分享一下他们是如何制作 iPhone 版本的 Django 网站的吗?
更新
我结合了中间件和调整模板调用。
对于中间件,我使用了minidetector。我喜欢它,因为它检测到一个plethora 的移动用户代理。我所要做的就是在我的视图中检查 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')
- 如果不存在移动版本,则使用以前的自动回退到常规模板。
【问题讨论】:
-
你也可以这样做/需要这个来拥有一个特殊的 IE6 版本的模板。我正在考虑使用 1 个模板,如果用户代理是 IE6,则带有一些条件。
-
我喜欢你的做法 :) 你会说我有过多的皮纳塔吗?
-
请注意,不幸的是,minidetector 似乎与 Python 3 不兼容。请参阅this SO question 了解替代方案。
标签: python django django-templates mobile-website django-middleware