1

我已经在 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,其中包含来自重定向页面的一些内容。

有任何想法吗?

4

2 回答 2

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^
于 2012-05-30T16:20:12.447 回答
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

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

于 2012-05-30T16:10:10.187 回答