根据用户代理更改Django模板 - python

我已经创建了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')
  • 如果不存在移动版本,则使用以前的版本自动回退到常规模板。
  • 参考方案

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

    Django BigInteger自动递增字段作为主键? - python

    我目前正在建立一个涉及大量集体智慧的项目。每个访问该网站的用户都将创建一个唯一的配置文件,然后将他们的数据用于为自己和其他用户计算最佳匹配。默认情况下,Django创建一个INT(11)id字段来处理模型的主键。我担心这会很快溢出(即,大约2.4b个设备在未事先设置Cookie的情况下访问了该页面)。如何在MySQL中将其更改为BIGINT并在Django自…

    Django Python日期时间设置为午夜 - python

    我有django对象的日期时间,但可以是一天中的任何时间。它可以是一天中的任何时间,但我需要将时间设置为00:00:00(另一个日期设置为23:59:59,但原理是相同的)end_date = lastItem.pub_date 当前的结束日期是2002-01-11 12:34:56我需要怎么做才能将其更改为00:00:00?我试过了:end_date.ho…

    Django:使用contenttypes框架的一般关系示例? - python

    我已经多次浏览了有关contenttypes框架的Django文档,但我对它的理解不足以在项目中实现泛型关系。我一直在寻找有关此事的在线示例或教程,但找不到一个。称我为哑巴,但在这方面我需要一些帮助(请不要仅通过链接到文档来回答问题)。基于在线资源的缺乏,我相信如果您用一个完整的例子来回答这个问题,您的答案可能是迄今为止有关django通用关系(奖金!)的最…

    Django:错误:您无权访问该端口 - python

    我是整个安装的新手,请保持友善。在dev上,该命令通常可以正常工作,但是自从我尝试使用Django的不同命令以来,某些东西就出错了。python manage.py runserver 0.0.0.0:80 我没有使用此端口的权限了。我可以使用端口8080,但将端口添加到url中通常的主机名末尾时,网站无法正常工作。当我使用端口80时,无论如何我都无需在UR…

    django-getlist() - python

    我刚刚发布了这个问题jQuery - passing arrays in post request,在发布请求中我不发送数组,但是jQuery代码没有问题。问题在于在django中接收到POST请求。我确实喜欢这个def portfolio_add(request): ukeys = request.POST.getlist('ukeys'…