2012-05-30 84 views
1

我一直在Google上搜索一段时间,一直没能找到我正在寻找的东西,并决定在这里问问大家。Django手机和全网站重定向

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

从理论上讲,我想检查传入的请求可能的移动设备(我已经可以做到这一点),并重定向到移动网站。在移动网站上,用户可以点击指向设置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,其中包含一些来自重定向页面的内容。

任何想法?

回答

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 

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

+0

是啊,我已经实现了一个移动的重定向伪,问题是当移动用户(即现在的移动页)想要回到完整的网站。您的解决方案不是完整的解决方案。 – Fernker

+0

尽管我没有明确地编写代码,但通过在if语句中检查cookie或会话变量来检查用户是否请求访问完整网站会非常简单。 –

+0

我已添加更新,因为添加需要添加的内容并不像我期望的那么简单。 – Fernker

1

django-mobile有很多您正在寻找的功能。 THey在几个不同的部分实施。第一个检测移动用户代理。第二个呈现与之相对应的模板(全站点或移动站点)。另外,它允许用户选择他们想要查看哪个版本(通过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^ 
+0

从这个角度来看,虽然我假设它预计每个页面的移动版本都是正确的(因此只是提供移动版本,而不是常规的桌面版本)?如果是这种情况,那么这不是我所需要的。至于你的第二个想法,使用会话框架还是cookie会更好? – Fernker

+0

@Fernker洋葱正在使用cookie来存储您的会话ID!但是,如果需要,您可以配置会话以将数据存储在加密的Cookie中。会话只是一个很好的简单抽象,可以将数据存储在不同的地方。 https://docs.djangoproject.com/en/dev/topics/http/sessions/#session-engine – dm03514