2012-05-30 127 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