2010-02-23 12 views
32

मेरे पास Django में एक वेब एप्लिकेशन लिखा गया है जिसमें एक विशिष्ट पृष्ठ है जिसे मैं टेम्पलेट (और थोड़ा अलग तर्क) के मोबाइल संस्करण को कार्यान्वित करना चाहता हूं। मैं इसे इस sudo कोड आला लागू करने में सक्षम होना चाहते हैं:पाइथन व्यू में मोबाइल ब्राउज़र (केवल आईफोन नहीं) का पता लगाएं

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) 

मैं समय की एक बड़ी राशि की जरूरत नहीं है और मैं अपने कोडिंग सीखने की अवस्था में :) बहुत जल्दी पर हूँ - मैंने पाया क्या मोबाइल डिवाइस क्षमताओं को प्राप्त करने के लिए ब्लूम नामक एक बहुत ही शक्तिशाली प्लग-इन ऐप दिखता है - http://code.google.com/p/django-bloom/wiki/BloomDevice हालांकि ऐसा लगता है कि जेएसओएन के माध्यम से बहुत सारे डिवाइस चश्मा प्राप्त करने के लिए अनुरोध करना है, जो मुझे आवश्यकता नहीं है, जो मेरे लिए थोड़ा अक्षम है।

क्या किसी के पास सुझाव आसान तरीका है? मेरा पता लगाने के लिए 100%, आईफोन, आईपॉड, एंड्रॉइड, और मुख्यधारा के उपकरणों की आवश्यकता नहीं है ...

क्या http_user_agent स्ट्रिंग के पास किसी प्रकार का मोबाइल ध्वज है जिसके लिए मैं जांच कर सकता हूं?

+0

टाइपो: sudo = छद्म – pmont

उत्तर

19

अद्यतन:

मैं सिर्फ पाया: http://code.google.com/p/minidetector/

कौन सा मैं वास्तव में क्या चाहते हो रहा है, मैं अब परीक्षण करने के लिए जा रहा हूँ। मुझे बताने में संकोच न करें मैं गलत हूँ!

+0

बंटवारे कि खोजने के लिए धन्यवाद। मेरे लिए, वह मिडलवेयर जो सभी घर-उगाए गए लोगों की तुलना में बेहतर समाधान दिखता है, मैंने कभी भी इसी तरह के उद्देश्यों को प्राप्त करने के लिए उपयोग किया है। – ayaz

+2

क्या यह परियोजना अद्यतित है? दिसंबर 2010 से इसमें कोई बदलाव नहीं आया है। मैं सक्रिय रूप से विकसित होने के बाद से https://github.com/shelfworthy/minidetector का उपयोग कर रहा था। दुर्भाग्यवश लेखक ने मुझे अभी बताया कि यह अब समर्थित नहीं है और वह उस जिथब रेपो को हटाने का अर्थ रहा है, इसलिए मैं एक प्रतिस्थापन की तलाश में हूं। –

+0

यदि आप मिनीडक्टर के लिए नेटवर्क की जांच करते हैं तो ऐसे कुछ फोर्क हैं जो इतने पुराने नहीं हैं - https://github.com/saschwarz/minidetector/network – Alvin

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)) 

तो अपने खाके में आप की तरह सामान को पेश करने में सक्षम हैं: Django-mobi बुलाया minidetecor का कांटा के लिए

<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

कई लोग इस सम्मेलन का पालन करते हैं, हालांकि मुझे यह पसंद नहीं है क्योंकि यह डेवलपर्स को केवल 1 की बजाय बयानों की भीड़ रखने के लिए मजबूर करता है। आप तर्क दे सकते हैं कि विभिन्न टेम्पलेट्स को पूरी तरह से दिखाया जाना DRY नहीं है, लेकिन मुझे लगता है कि दोनों को अलग करने की स्वच्छता इसके लायक है। – Mikhail

7

जाने, यह इसके उपयोग के बारे में प्रलेखन भी शामिल है।

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

+0

यह सबसे अच्छा समाधान की तरह लगता है। __ "कांटा विवरण: मैंने कोड को पुनर्गठित किया, कैशिंग जोड़ा, और यहां और वहां कुछ बदलाव किए।" __ – Druska

संबंधित मुद्दे