{"id":1045,"date":"2010-11-12T09:36:26","date_gmt":"2010-11-12T07:36:26","guid":{"rendered":"http:\/\/j-mad.com\/blog\/?p=1045"},"modified":"2011-05-05T17:48:23","modified_gmt":"2011-05-05T15:48:23","slug":"preparez-un-solide-alibi-parce-que-nous-savons-que-vous-avez-un-mobile-un-django-mobile","status":"publish","type":"post","link":"https:\/\/j-mad.com\/blog\/2010\/11\/12\/preparez-un-solide-alibi-parce-que-nous-savons-que-vous-avez-un-mobile-un-django-mobile\/","title":{"rendered":"Pr\u00e9parez un solide alibi, parce que nous savons que vous avez un mobile, un django-mobile"},"content":{"rendered":"<p>J&#8217;ai d\u00e9j\u00e0 fait un billet parlant d&#8217;une app de monsieur <a href=\"https:\/\/github.com\/gregmuellegger\">gregmuellegger<\/a>, \u00e0 savoir celui sur les <a href=\"http:\/\/j-mad.com\/blog\/2010\/07\/31\/django-websocket-parce-que-sans-chaussettes-le-web-il-pue-un-peu-des-pieds\/\">websockets<\/a>. Mais le monsieur \u00e9tant prolifique, je me vois &#8216;oblig\u00e9&#8217; d&#8217;\u00e9crire \u00e0 nouveau sur une de ses apps, \u00e0 savoir django-mobile.<\/p>\n<h1>1- O\u00f9 on le trouve, comment on l\u2019installe, tout \u00e7a quoi (et la doc)\u00a0?<\/h1>\n<p>Alors on trouve django-mobile \u00e0 la fois sur\u00a0:<\/p>\n<ul>\n<li>sa page <a href=\"http:\/\/pypi.python.org\/pypi\/django-mobile\/\">pypi<\/a><\/li>\n<li>sa page <a href=\"https:\/\/github.com\/gregmuellegger\/django-mobile\">github<\/a>.<\/li>\n<\/ul>\n<p>Pour l&#8217;installer donc, un petit coup de<\/p>\n<ul>\n<li>easy install ou apparent\u00e9<\/li>\n<li>git clone<\/li>\n<\/ul>\n<p>et le tour est jou\u00e9.<\/p>\n<p>La doc quand a elle, est bien fournie. Avec une description &#8216;th\u00e9orique&#8217;, des exemples pr\u00e9cis et une explication pour chacune des variables de configuration utilisable<\/p>\n<h1>2- Mais au fait, \u00e0 quoi \u00e7a sert\u00a0?<\/h1>\n<p>Comme son nom l&#8217;indique, django-mobile permet d&#8217;avoir un mode de visualisation mobile pour son site django. Mais en fait, pas seulement. Il permet en fait d&#8217;avoir X modes de visualisation pour son site\u00a0:\u00a0 mobile, Ipad, sans image, etc \u2026.<\/p>\n<h1>3- Comment \u00e7a marche\u00a0?<\/h1>\n<p>Django-mobile fonctionne avec le concept de &#8216;flavour&#8217;.<br \/>\nVous commencez par d\u00e9finir plusieurs &#8216;flavour&#8217; pour votre site, tout simplement en les listant dans votre settings.py.<\/p>\n<p>Chaque flavour se d\u00e9fini par son nom et surtout son jeu de template propre qui sont tous rang\u00e9 dans un ou des sous-r\u00e9pertoires ayant le nom de la flavour en question.<\/p>\n<p>Ensuite il suffit de passer d&#8217;une flavour \u00e0 l&#8217;autre. Pour cela deux fa\u00e7on soit c&#8217;est une d\u00e9tection automatique (pour passer en mode mobile) soit vos visiteurs peuvent passer d&#8217;une flavour \u00e0 une autre. La valeur de la flavour courante sera alors stock\u00e9e comme une variable de session (dont le nom est param\u00e9trable)<\/p>\n<p>Le tout fonctionne assez simplement en se basant sur\u00a0:<\/p>\n<ul>\n<li>un middleware qui d\u00e9tecte automatiquement si vous venez d&#8217;un terminal mobile ou pas<\/li>\n<li>un loader qui rajoute le nom de la flavour en r\u00e9pertoire pr\u00e9fixe pour vos templates<\/li>\n<li>deux context processor qui injectent l&#8217;un le nom de la flavour courante et l&#8217;autre indique si on est en mode mobile ou pas<\/li>\n<li>un middleware qui permet de changer la flavour courante.<\/li>\n<\/ul>\n<p>Django-mobile, en plus d&#8217;\u00eatre simple est pas mal customisable, presque \u00e0 l&#8217;exc\u00e8s. On peut configurer le nom du param\u00e8tre de ssion qui stockera la flavour courante choisi par vos visiteurs, le nom du param\u00e8tre GET qui permet de changer la flavour courante. On peut \u00e9galement d\u00e9sactiver la possibilit\u00e9 pour l&#8217;utilisateur de choisir sa flavour ou choisir si on veut rajouter un r\u00e9pertoire pr\u00e9fix de plus \u00e0 tout les r\u00e9pertoires de flavour (pour les ranger proprement tous dans un r\u00e9pertoire flavour par exemple).<\/p>\n<p>Que du bon donc, et une petite app \u00e0 utiliser sans mod\u00e9ration (va falloir que je pense \u00e0 l&#8217;int\u00e9grer pour histoire de rolistes tiens ). Et puis en plus, j&#8217;ai m\u00eame pu faire un jeu de mot dont je suis excessivement fier dans mon titre de billet&#8230;:)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>J&#8217;ai d\u00e9j\u00e0 fait un billet parlant d&#8217;une app de monsieur gregmuellegger, \u00e0 savoir celui sur les websockets. Mais le monsieur \u00e9tant prolifique, je me vois &#8216;oblig\u00e9&#8217; d&#8217;\u00e9crire \u00e0 nouveau sur une de ses apps, \u00e0 savoir django-mobile. 1- O\u00f9 on le trouve, comment on l\u2019installe, tout \u00e7a quoi (et la doc)\u00a0? Alors on trouve django-mobile &hellip; <a href=\"https:\/\/j-mad.com\/blog\/2010\/11\/12\/preparez-un-solide-alibi-parce-que-nous-savons-que-vous-avez-un-mobile-un-django-mobile\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Pr\u00e9parez un solide alibi, parce que nous savons que vous avez un mobile, un django-mobile<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[35],"tags":[99,98],"class_list":["post-1045","post","type-post","status-publish","format-standard","hentry","category-la-django-app-du-mois","tag-django","tag-python"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p12cdp-gR","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/1045","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/comments?post=1045"}],"version-history":[{"count":4,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/1045\/revisions"}],"predecessor-version":[{"id":1052,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/1045\/revisions\/1052"}],"wp:attachment":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/media?parent=1045"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/categories?post=1045"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/tags?post=1045"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}