我一直在谷歌上寻找一段时间,但却找不到我想要的东西,并决定在这里问每个人。
我有一个完整的网站和移动版本的网站(一页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,包含重定向页面中的一些内容。
有什么想法吗?
答案 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
编。在下面反映我的评论。