当前位置:  开发笔记 > 编程语言 > 正文

基于User-Agent更改Django模板

如何解决《基于User-Agent更改Django模板》经验,为你挑选了2个好方法。

我做了一个Django网站,但我喝了Koolaid,我想制作一个iPhone版本.经过深思熟虑,我提出了两个选择:

    制作一个完整的其他网站,例如i.xxxx.com.使用Django的站点框架将其绑定到同一个数据库中.

    找一些读取用户代理的中间件,并动态更改模板目录.

不过,我真的更喜欢选项#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')

如果不存在移动版本,则使用先前的自动回退到常规模板.

afarnham.. 20

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



1> afarnham..:

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


我所做的是编写自己的render_to_response包装器并将其放在项目范围的实用程序库中.然后只导入而不是render_to_response(如my_render_response).您在视图中拥有相同数量的代码,只需更改视图中的import和func调用即可.

2> Aneil Mallav..:

检测中间件中的用户代理,切换url绑定,获利!

怎么样?Django请求对象具有.urlconf属性,可以由中间件设置.

来自django docs:

Django确定要使用的根URLconf模块.通常,这是ROOT_URLCONF设置的值,但如果传入的HttpRequest对象具有名为urlconf的属性(由中间件请求处理设置),则将使用其值代替ROOT_URLCONF设置.

    在yourproj/middlware.py中,编写一个检查http_user_agent字符串的类:

    import re
    MOBILE_AGENT_RE=re.compile(r".*(iphone|mobile|androidtouch)",re.IGNORECASE)
    class MobileMiddleware(object):
        def process_request(self,request):
            if MOBILE_AGENT_RE.match(request.META['HTTP_USER_AGENT']):
                request.urlconf="yourproj.mobile_urls"
    

    不要忘记将它添加到settings.py中的MIDDLEWARE_CLASSES:

    MIDDLEWARE_CLASSES= [...
        'yourproj.middleware.MobileMiddleware',
    ...]
    

    创建一个移动urlconf,yourproj/mobile_urls.py:

    urlpatterns=patterns('',('r'/?$', 'mobile.index'), ...)
    

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有