2010-02-23 99 views
32

我有一個用Django編寫的Web應用程序,它有一個特定的頁面,我想實現該模板的移動版本(以及稍微不同的邏輯)。我希望能夠實現它ALA這個須藤代碼:在python視圖中檢測手機瀏覽器(不只是iPhone)

def(myView) 

    do some stuff 

    if user-is-on-a-mobile-device: 
    do some stuff 
    return (my mobile template) 

    else: 
    do some stuff 
    return (my normal template) 

我沒有大量的時間和我在編碼學習曲線:)敢早 - 我發現了什麼看起來是一個非常強大的可插拔應用程序,名爲Bloom,用於獲取移動設備功能 - http://code.google.com/p/django-bloom/wiki/BloomDevice 但是它似乎通過JSON發出了一個請求,以獲得大量我不需要的設備規格,這對我來說似乎有點低效。

有沒有人有建議更簡單的方法?我的檢測不需要100%,只需iPhone,iPod,Android和主流設備...

http_user_agent字符串是否有某種移動標誌可以檢查?

+0

錯字:須藤=僞 – pmont 2014-01-31 15:18:18

回答

19

更新:

我才發現:http://code.google.com/p/minidetector/

這似乎做我想要什麼,我現在要去測試。隨意告訴我,我錯了!

+0

謝謝你的分享是找到。對我而言,那些中間件看起來比我用來實現類似目的的所有本土解決方案更好。 – ayaz 2010-11-11 08:01:34

+2

該項目是否最新?自2010年12月以來,它沒有發生過任何變化。我正在使用https://github.com/shelfworthy/minidetector,因爲它是積極開發的。不幸的是,作者剛剛告訴我,它不再支持,他一直在刪除該github回購,所以我正在尋找替代品。 – 2011-11-28 20:49:05

+0

如果你檢查minidector的網絡有一些叉是不是過時 - https://github.com/saschwarz/minidetector/network – Alvin 2012-09-13 10:38:20

15

最佳實踐:使用minidetector將額外信息添加到請求中,然後使用django的內置請求上下文將它傳遞到您的模板中,如下所示。

from django.shortcuts import render_to_response 
from django.template import RequestContext 

def my_view_on_mobile_and_desktop(request) 
    ..... 
    render_to_response('regular_template.html', 
         {'my vars to template':vars}, 
         context_instance=RequestContext(request)) 

然後在模板中,您能介紹的東西,如:

<html> 
    <head> 
    {% block head %} 
    <title>blah</title> 
    {% if request.mobile %} 
    <link rel="stylesheet" href="{{ MEDIA_URL }}/styles/base-mobile.css"> 
    {% else %} 
    <link rel="stylesheet" href="{{ MEDIA_URL }}/styles/base-desktop.css"> 
    {% endif %} 
    </head> 
    <body> 
    <div id="navigation"> 
     {% include "_navigation.html" %} 
    </div> 
    {% if not request.mobile %} 
    <div id="sidebar"> 
     <p> sidebar content not fit for mobile </p> 
    </div> 
    {% endif %> 
    <div id="content"> 
     <article> 
     {% if not request.mobile %} 
     <aside> 
      <p> aside content </p> 
     </aside> 
     {% endif %} 
     <p> article content </p> 
     </aricle> 
    </div> 
    </body> 
</html> 
+1

許多人遵循這個約定,但我不喜歡它,因爲它會迫使開發人員擁有大量的if語句而不是1個。你可以爭辯說,完全展示不同的模板不是乾的,但我認爲分離兩者的理智是值得的。 – Mikhail 2013-09-15 02:10:51

7

隨時隨地minidetecor稱爲Django的.mobi的叉,它包括關於如何使用它的文檔。

https://pypi.python.org/pypi/django-mobi

+0

這似乎是最好的解決方案。 __「分叉描述:我重新組織代碼,添加緩存,並在這裏和那裏做了一些調整。」__ – Druska 2013-04-22 13:13:45

相關問題