【问题标题】:Django mobile and full site redirectsDjango 移动和全站重定向
【发布时间】:2012-05-30 15:48:57
【问题描述】:

我在 Google 上搜索了一段时间,但无法准确找到我要查找的内容,因此决定在这里向大家询问。

我有一个完整的网站和网站的移动版本(一页 jQuery Mobile 文件)。

理论上我想要检查可能的移动设备的传入请求(我已经可以这样做)并重定向到移动站点。在移动网站上,用户可以单击指向设置 cookie 的完整网站的链接,并且不会将该用户重定向回移动网站(即使他们的设备每次请求都会满足该条件)。

我所能找到的只是关于如何检查移动/桌面设备的每个请求并相应地更改模板。在这种情况下,这不是我需要做的。对于移动版和桌面版来说,这是一个完全不同的模板。

有什么想法或解决方案可以在这种情况下有所帮助?

更新 1:

所以我已经尝试实现这一点,但我遇到了一些奇怪的问题/问题。这是我的中间件(在设置中的中间件列表中最后列出)

class mobile_check(object):

def process_request(self,request):
    if mobileBrowser(request) and not request.session.get('view_full'):
        return HttpResponseRedirect(reverse('posts.views.mobile_django'))

这是当他们在 jQuery Mobile 中单击完整站点链接时要处理的视图。

def mobile_fullsite(request):
#import pdb; pdb.set_trace()

request.session['view_full'] = True
return HttpResponseRedirect(reverse('posts.views.index'))

在我看来,这应该可以正常工作,但事实并非如此。它从链接中访问 mobile_fullsite 视图,并且 url 从 .../mobile/ 更改为 .../fullsite/ 但它看起来仍然像 jQuery mobile,带有来自重定向页面的一些内容。

有什么想法吗?

【问题讨论】:

    标签: django mobile jquery-mobile django-middleware


    【解决方案1】:

    django-mobile 具有您正在寻找的许多功能。它们在几个不同的部分中实现。第一个检测移动用户代理。第二个呈现与该模板相对应的模板(完整站点或移动站点)。此外,它允许用户选择他们想要查看的版本(通过 GET 请求)。 https://github.com/gregmuellegger/django-mobile

    请检查一下,即使它没有你需要的一切,它也有广泛的追随者,我相信它能够为你提供一些代码。

    如果您的用例稍有不同,您可以轻松地使用 django 的会话框架 (https://docs.djangoproject.com/en/dev/topics/http/sessions/) 来相应地保持直接用户。

    # user asks to view full site
    request.session['view_full'] = True
    

    然后在您的中间件中检查移动用户代理时,在下面伪

    if is_mobile and not request.session.get('view_full'):
      # they have mobile device and haven't request to see full site!~
      # Just check that they don't have a preference for viewing full site^
    

    【讨论】:

    • 从这个角度来看,虽然我假设它需要我的每个页面的移动版本(因此只是提供移动版本而不是常规桌面版本)是正确的吗?如果是这样的话,那不是我所需要的。至于您的第二个想法,使用会话框架或cookie会更好吗?
    • @Fernker seeions 正在使用 cookie 来存储您的会话 ID!但是,如果需要,您可以配置会话以将数据存储在加密的 cookie 中。会话只是一个很好的简单抽象,用于将数据存储在各种地方。 docs.djangoproject.com/en/dev/topics/http/sessions/…
    【解决方案2】:

    您可能需要完全重定向,而不仅仅是更改模板。看django.http.HttpResponseRedirect

    from django.http import HttpResponseRedirect
    
    # test for mobile device here
    # test for full site session variable here
    fullSiteRequest = request.session.get('User_Wants_Full_Site', False)
    
    if mobileDevice and not fullSiteRequest:
        return HttpReponseRedirect('mobile.mysite.com')
    
    # continue onto your regular site
    

    编辑。在下面反映我的评论。

    【讨论】:

    • 是的,我已经实现了移动重定向,问题是移动用户(现在在移动页面上)想要返回完整站点时。您的解决方案不是完整的解决方案。
    • 虽然我没有明确编码,但通过检查 if 语句中的 cookie 或会话变量来检查用户是否请求访问完整站点会相当简单。
    • 我添加了一个更新,因为添加需要添加的内容并不像我预期的那样简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 2012-09-02
    相关资源
    最近更新 更多