Django移动和完整站点重定向

时间:2012-05-30 15:48:58

标签: django mobile jquery-mobile django-middleware

我一直在谷歌上寻找一段时间,但却找不到我想要的东西,并决定在这里问每个人。

我有一个完整的网站和移动版本的网站(一页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视图,并且网址从... / mobile /更改为... / fullsite /但它仍然看起来像jQuery mobile,包含重定向页面中的一些内容。

有什么想法吗?

2 个答案:

答案 0 :(得分: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^

答案 1 :(得分:0)

您可能需要完整的重定向,而不仅仅是更改模板。看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

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