## page was renamed from Projet/SemaineTech2011/Ateliers/Django/Conversation ## page was renamed from Projet/SemaineTech/Ateliers/Django/Conversation <> = Lundi = {{{#!highlight irc (15:10:38) davin.baragiotta: -------------------- DEBUT : Atelier Django -------------------- (15:10:50) olivier.larcheveque: Bonjour! (15:11:34) olivier.larcheveque: cet atelier va présenter Django, un framework qui permet de construite des applications Web (15:12:38) olivier.larcheveque: il va notemment montrer comment on peut créer rapidement des interfaces web qui permettent de manipuler une base de données (15:12:52) olivier.larcheveque: normalement vous disposez d'un projet fonctionnel (15:12:56) olivier.larcheveque: taper (15:13:03) olivier.larcheveque: bin/django runserver (15:13:41) olivier.larcheveque: on voit ceci dans le terminal (15:13:43) olivier.larcheveque: Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C. (15:14:15) olivier.larcheveque: le serveur Web est donc prêt à recevoir des requêtes par votre navigateur (15:14:40) olivier.larcheveque: aller a cette adresse (15:14:41) olivier.larcheveque: http://127.0.0.1:8000/media/ppp/presentation.html (15:15:45) olivier.larcheveque: correct jusqu'ici? (15:15:45) davin.baragiotta: a priori oui : pas de commentaires (15:16:00) olivier.larcheveque: diapp plan, 1 point un peu de théorie (15:16:54) olivier.larcheveque: puis les points 2 et 3 ou nous allons construire une application avec des interfaces web qui permettent de manipuler une des données provenant de la base (15:18:00) olivier.larcheveque: Tout ceci va permettre de construire une application Django capable de fournir des fonctionnalités de base pour un site de support (FAQ + téléchargement de fichiers ressources) (15:18:31) olivier.larcheveque: diapo framework (15:18:48) olivier.larcheveque: un framework, c'est tout simplement une boite à outils de code (15:20:09) olivier.larcheveque: il apporte des briques logicielles de base, qui permettent de développer pas mal tout ce qu'on veut sans avoir à tout recoder (15:20:25) olivier.larcheveque: diapo suivante (15:20:55) olivier.larcheveque: un framework vient avec des notions de bases (15:21:07) olivier.larcheveque: des bonnes pratiques disons (15:21:17) olivier.larcheveque: expliquées dans cette diapo (15:21:46) olivier.larcheveque: c'est le cas de Django, il suit cette séparation logique dans son code, et le code que vous allez faire (15:21:57) olivier.larcheveque: diapo traitement d'une requete (15:22:26) olivier.larcheveque: on va examiner ce qui se passe pour voir une page web (15:23:08) olivier.larcheveque: ouvrez un autre onglet navigateur et aller ici (15:23:09) olivier.larcheveque: http://127.0.0.1:8000/support/faq/ (15:23:31) olivier.larcheveque: ouvrez parallalement un editeur de fichier (15:24:09) olivier.larcheveque: le serveur recoit une requete et la transmet a Django (15:24:23) olivier.larcheveque: il doit la router (15:24:50) olivier.larcheveque: c'est déclaré dans le fichier project/support/urls.py (15:25:28) olivier.larcheveque: on a appelé la page faq tantot, ce qui route vers la vue "faq" (15:25:58) olivier.larcheveque: ensuite regardons le fichier project/support/views.py (15:26:51) olivier.larcheveque: il y a la fonction faq() qui est responsable de construire la page, et fournir une réponse HTTP, en utilisant un template HTML (15:27:11) olivier.larcheveque: on retrouve les templates dans project/support/templates (15:27:29) olivier.larcheveque: c'est bon? (15:27:44) davin.baragiotta: pas de questions à date (15:28:02) olivier.larcheveque: ok on va passer direct dans l'admin ici (15:28:05) olivier.larcheveque: http://127.0.0.1:8000/admin/ (15:28:22) olivier.larcheveque: vous avez besoin du login/mdp lors de l'installation du projet (15:28:43) olivier.larcheveque: on voit dans l'application support FAQ (15:29:00) olivier.larcheveque: si on clique on peut aller sur une page qui liste les FAQ (15:29:20) olivier.larcheveque: on peut en ajouter une nouvelle si on veut avec le bouton en haut à droite (15:29:49) olivier.larcheveque: nous allons créer la meme choses pour qu'on puisse ajouter des Ressources (15:30:22) olivier.larcheveque: allons dans le fichier project/support/models.py (15:30:32) olivier.larcheveque: il y a un modèle à créer (15:30:53) olivier.larcheveque: vous pouvez vous inspirer du modèle FAQ pour créer le votre (15:31:47) olivier.larcheveque: une fois votre modèle ajusté (15:31:49) olivier.larcheveque: faites (15:32:04) olivier.larcheveque: bin/django reset support (YES sans crainte) (15:32:21) davin.baragiotta: si vous voulez voir la FAQ que vous venez d'ajouter dans l'interface admin : assurez-vous d'avoir coché le champ "public"... ensuite, vous pouvez recharger la page public (hors admin) : http://127.0.0.1:8000/support/faq/ (15:32:42) olivier.larcheveque: ceci a pour effet de créer les tables en BD (15:33:15) olivier.larcheveque: (les chanceux avec un projet cablé sur MySQL avec un phpMyAdmin peuvent voir ca tout de suite) (15:33:51) olivier.larcheveque: voici une proposition de modèle ci : (15:33:53) olivier.larcheveque: http://paste.pocoo.org/show/464971/ (15:34:36) olivier.larcheveque: 1. mettons cette classe dans le support/models.py (15:34:53) olivier.larcheveque: 2. bin/django reset support pour créer la structure en BD (15:35:37) olivier.larcheveque: bon, génial on a un modele on va intergarir dessus en greffant les interfaces d'admin (15:35:53) olivier.larcheveque: dans le fichier project/support/admin.py (15:36:40) olivier.larcheveque: il faut enregister son modele de données une une classe admin qui permet de créer les interfaces automatiquement (15:37:20) olivier.larcheveque: on voit pas mal de choses pour notre modele FAQ (15:37:35) olivier.larcheveque: on va faire de meme pour notre modele Ressource (15:37:43) olivier.larcheveque: encore plus minimaliste! (15:38:22) olivier.larcheveque: voici une possibilité a ajouter a la fin de project/support/admin.py (15:38:26) olivier.larcheveque: http://paste.pocoo.org/show/464974/ (15:39:12) davin.baragiotta: ( vous pouvez mettre 4 espaces devant "pass" pour être PEP8 ;) ) (15:39:19) olivier.larcheveque: finalement on peut retourner voir dans l'admin (15:39:27) olivier.larcheveque: http://127.0.0.1:8000/admin/ (15:39:54) olivier.larcheveque: Normalement, le modèle Ressources apparait dans l'application "support" (15:40:48) olivier.larcheveque: Si c'est le cas, cliquez dessus pour aller a la page de liste (15:41:04) olivier.larcheveque: puis ajouter une ressource (lien en haut a droite) (15:41:49) davin.baragiotta: attention : notre modèle rend obligatoire les 2 champs ;) (15:41:58) olivier.larcheveque: on constate que les champs, sont rendus automiquement avec les bons widgets (titre = widget input test, fichier = widget upload de fichier) (15:43:31) olivier.larcheveque: C'est pas génial quand même? (15:43:44) davin.baragiotta: plutôt! (15:43:56) olivier.larcheveque: ca va pour vous? (15:44:52) davin.baragiotta: tout marche on dirait bien! (15:44:57) davin.baragiotta: les gens sont en feu! ;) (15:45:00) olivier.larcheveque: moi je continue pas sans réponse, j'ai le temps dans mon atelier, c'est un atelier Django on fait les trucs tellement vite! (15:45:31) olivier.larcheveque: ok bon on voit dans la liste des objets ressources (15:45:31) davin.baragiotta: réponse : ça roule!, continuons! (15:45:35) olivier.larcheveque: http://127.0.0.1:8000/admin/support/ressource/ (15:46:01) olivier.larcheveque: une ligne "ressource object" qui correspond à ce qu'on vient d'ajouter (15:46:24) olivier.larcheveque: on va arranger ca pour afficher le titre de la ressource qu'on a rempli (15:46:38) olivier.larcheveque: retourner dans le fichier support/admin.py (15:48:08) olivier.larcheveque: et on ajoute une variable dans la classe nommée list_display (15:48:18) olivier.larcheveque: qui est une liste (15:48:27) olivier.larcheveque: ou on spécifie le champs à afficher (15:48:32) olivier.larcheveque: ce qui donne : (15:48:34) olivier.larcheveque: http://paste.pocoo.org/show/466464/ (15:48:47) olivier.larcheveque: (ligne 3) (15:49:05) olivier.larcheveque: retourner voir le changement (15:49:06) olivier.larcheveque: http://127.0.0.1:8000/admin/support/ressource/ (15:51:16) olivier.larcheveque: Tout ceci permet d'avoir un beau petit backend (15:52:05) olivier.larcheveque: Le framework Django permet ensuite d'exploiter nos données pour les proposer dans un portail, comme je vous ai montré au départ (15:53:11) olivier.larcheveque: Il propose des modules intéressants comme l'ORM qui permet de manipuler la BD à travers des objets Python (15:53:55) olivier.larcheveque: ou encore des modules qui permettent de générer des formulaires automatiquement en se reposant sur un modèle de données particulier (15:54:05) olivier.larcheveque: (comme dans l'admin!) (15:55:12) olivier.larcheveque: Des questions? (15:55:49) davin.baragiotta: (10:51:04) davin.baragiotta: QUESTION : pourquoi je ne vois pas ma ressource s'afficher dans la partie publique du site? (10:51:23) davin.baragiotta: http://127.0.0.1:8000/support/docs/ (10:54:29) olivier.larcheveque: Parce qu'on ne l'a pas codé ;) (15:56:27) olivier.larcheveque: ok bon je pense qu'on peut essayer de faire la vue (15:56:43) olivier.larcheveque: on s'attaque au fichier support/views.py (15:57:04) olivier.larcheveque: la fonction docs est deja prete! (15:57:14) olivier.larcheveque: avec un TODO! (15:57:43) olivier.larcheveque: il s'agit de récupérer les Ressources et les ajouter au dictionnaire data (15:57:56) olivier.larcheveque: regarder la fonction faq() pour vous inspirer (15:58:26) olivier.larcheveque: en haut on a un from models import FAQ (15:58:38) olivier.larcheveque: importons aussi notre model Ressource (15:58:43) davin.baragiotta: on va donc coder pour quoi voit la liste des ressources dans site public (frontend)? (15:58:51) olivier.larcheveque: from models import FAQ, Ressource (15:59:17) olivier.larcheveque: oui on est parti pour faire une vue qui liste les ressources dans le site public! (16:00:11) davin.baragiotta: hourra! (16:00:25) olivier.larcheveque: def docs(request): """ Page qui liste les ressources. """ data = { 'ressources' : Ressource.objects.all(), } return render_to_response('support/docs.html', data, RequestContext(request)) (16:01:03) olivier.larcheveque: voyez la manière de récupérer l'ensemble des ressources (16:01:13) olivier.larcheveque: Ressource.objects.all() (16:02:12) davin.baragiotta: en une ligne seulement? ouah! (16:02:16) olivier.larcheveque: rendons-nous maintenant dans la template pour faire afficher ces ressources (16:02:40) olivier.larcheveque: project/support/templates/support/docs.html (16:03:35) olivier.larcheveque: on va itérer sur les objets ressources préparés dans la view (16:04:26) olivier.larcheveque: coller cette petite portion apres le titre (16:04:34) olivier.larcheveque: {% for res in ressources %}

{{ res.titre }}

{% endfor %} (16:05:24) olivier.larcheveque: ce langage dans la template est un langage spécial (minimaliste) (16:05:29) olivier.larcheveque: une boucle for (16:05:49) olivier.larcheveque: {{ }} pour afficher la valeur d'un objet (16:06:15) olivier.larcheveque: si il n'y a pas d'erreurs, on retourne http://127.0.0.1:8000/support/docs/ (16:06:37) olivier.larcheveque: et on devrait voir le titre des ressources s'affichier (16:06:58) olivier.larcheveque: (on peut imaginer ajouter le lien pour télécharger le fichier) (16:07:22) olivier.larcheveque: Et voilà ca fait 1H ;) (16:07:23) davin.baragiotta: QUESTION : (11:07:07) thierry.tsitoara: QUESTION: Apres import FAQ, Ressource on fait quoi deja . Je sais pas si je suis perdu :-) (16:07:44) davin.baragiotta: thierry : faut coder le corps de la focntion (16:07:52) davin.baragiotta: def docs(request): """ Page qui liste les ressources. """ data = { 'ressources' : Ressource.objects.all(), } return render_to_response('support/docs.html', data, RequestContext(request)) (16:07:59) davin.baragiotta: en fait cette fonction existait déjà (16:08:03) davin.baragiotta: manquait que la ligne : (16:08:10) davin.baragiotta: 'ressources' : Ressource.objects.all(), (16:08:20) davin.baragiotta: dans la variable (dictionnaire) "data" (16:08:54) davin.baragiotta: la views prépare les variables qu'on utilisera dans template (notre gabarit HTML) (16:09:34) davin.baragiotta: dans la variables nommées "ressources" on dit à Django d'aller chercher tous les objets de notre classe Ressource (16:09:55) davin.baragiotta: (Django va chercher l'info dans notre base de données) (16:10:31) davin.baragiotta: donc, après, faut coder le template pour utiliser la variable "ressources" (16:10:51) davin.baragiotta: on l'utilise en itération (avec "for") sur tous les objets récupérer de la base de données (16:12:00) olivier.larcheveque: Je vais commiter les solutions de l'Atelier dans une branche solutions (16:12:16) davin.baragiotta: QUESTION : (11:11:42) willy.manga: QUESTION : en suivant un peu le tuto officiel, on propose plusieurs façons d'obtenir des vues. as-tu une préférence ? là tu as utiliser render_to_response de django.shortcuts pourquoi ? (16:13:29) olivier.larcheveque: la plupart du temps, ton but c'est de mapper des données dans un template (HTML) (16:14:49) olivier.larcheveque: En gros ca t'évite d'instancier uen classe Template, de le render avec les données, s'instancier une réponse HTTP et de fournir ton template renderé... (16:15:19) davin.baragiotta: donc render_to_response nous convient dans la plupart des cas, pour les autres cas, voir la doc? (16:15:56) davin.baragiotta: (11:13:36) progfou: REMARQUE : quand la page à afficher ne réclame pas de traitement complexe, on peut aussi réutiliser les vues génériques de Django : https://docs.djangoproject.com/en/1.2/ref/generic-views/#simple-generic-views (16:16:03) davin.baragiotta: (11:15:18) thierry.tsitoara: QUESTION: Le templates que tu es en train de parler, est ce les fichiers html dans /support/templates/support ? (16:16:31) olivier.larcheveque: exact thierry (16:16:38) davin.baragiotta: oui les templates vivent dans /templates (16:16:47) olivier.larcheveque: celle de notre exemple c'est docs.html (16:17:07) davin.baragiotta: c'est cette ligne qui donne le nom du template : (16:17:08) davin.baragiotta: return render_to_response('support/docs.html', data, RequestContext(request)) (16:18:09) davin.baragiotta: en gros ça se lit : construit moi la réponse HTTP à partir de ce template suppoert/docs.html pour lequel je te fournit les variables dans data (en plus du contexte) (16:21:16) olivier.larcheveque: Je viens de vous mettre les exemples que vous avez ajoutés dans le code, dans une branche solutions ;) (16:23:07) davin.baragiotta: --------------------------------- FIN : Atelier Django --------------------------------- }}} = Jeudi = {{{#!highlight irc (14:07:42) olivier.larcheveque: les personnes qui vont suivre l'atelier Django peuvent se manifester? (14:11:34) olivier.larcheveque: Bonjour, on va commencer (14:11:55) davin.baragiotta: ---------- DÉBUT : Atelier : Django ---------------- (14:12:03) olivier.larcheveque: Bonjour (14:12:08) olivier.larcheveque: le but de cet atelier : (14:12:21) olivier.larcheveque: comprendre un framework MVC (14:12:30) olivier.larcheveque: susciter l'intérêt de Django ;) (14:12:41) olivier.larcheveque: jeter les bases pour comprendre Django (14:12:59) olivier.larcheveque: Ok lancer le serveur Web de Dango (14:13:04) olivier.larcheveque: bin/django runserver (14:13:18) olivier.larcheveque: http://127.0.0.1:8000/media/ppp/presentation.html (14:13:40) olivier.larcheveque: utiliser les flèches pour changer de page (14:13:48) olivier.larcheveque: le plan (14:13:57) olivier.larcheveque: une partie théorique expéditive (14:14:37) olivier.larcheveque: et la pratique où nous allons construire une application Django d'aide en ligne avec une partie FAQ et documents en ligne (14:15:03) olivier.larcheveque: FRAMEWORK : (14:15:11) olivier.larcheveque: un framework, c'est tout simplement une boite à outils de code (14:15:16) olivier.larcheveque: il apporte des briques logicielles de base, qui permettent de développer pas mal tout ce qu'on veut sans avoir à tout recoder (14:15:27) olivier.larcheveque: un framework vient avec des notions de bases (14:15:50) olivier.larcheveque: c'est ce que j'explique dans la diapo MVC (14:16:10) olivier.larcheveque: je vous laisse lire une minute (14:16:47) olivier.larcheveque: ce sont des concepts classiques qu'on retrouve bien sûr dans Django (14:17:10) olivier.larcheveque: voyons maintenant ce qui se passe lorsqu'une requete est faite (14:17:17) olivier.larcheveque: diapo suivante (14:17:42) olivier.larcheveque: http://127.0.0.1:8000/support/faq (http://127.0.0.1:8000/support/faq/) (14:17:55) olivier.larcheveque: nous observons une page web (14:18:01) olivier.larcheveque: que se passe-t-il? (14:18:14) olivier.larcheveque: le serveur web recoit une requete et la transmet a Django (14:18:19) olivier.larcheveque: il doit la router (14:18:26) olivier.larcheveque: c'est déclaré dans le fichier project/support/urls.py (14:18:55) olivier.larcheveque: (garder sous le code le projet ou vous avez fait le git clone, on va explorer le code en meme temps) (14:19:07) olivier.larcheveque: on a appelé la page faq tantôt, ce qui route vers la vue "faq" (14:19:18) olivier.larcheveque: ensuite regardons le fichier project/support/views.py (14:19:36) olivier.larcheveque: il y a la fonction faq() qui est responsable de construire la page, et fournir une réponse HTTP, en utilisant un template HTML (14:19:47) olivier.larcheveque: on retrouve les templates dans project/support/templates/support (14:20:19) olivier.larcheveque: est-ce que ça va? (14:21:11) olivier.larcheveque: le principe de découplage est important, est-ce qu'en voyant le code de l'application support ça se comprends bien? (14:22:40) davin.baragiotta: pas de questions pour l'instant (14:22:49) olivier.larcheveque: ok je continue (14:23:05) olivier.larcheveque: votre serveur est toujours lancé (14:23:10) olivier.larcheveque: regardons la page (14:23:11) olivier.larcheveque: http://127.0.0.1:8000/admin/ (14:23:32) olivier.larcheveque: (utilisez les accès créés au moment du pré-requis) (14:23:38) olivier.larcheveque: on voit dans l'application support FAQ (14:23:43) olivier.larcheveque: si on clique on peut aller sur une page qui liste les FAQ (14:23:47) olivier.larcheveque: on peut en ajouter une nouvelle si on veut avec le bouton en haut à droite (14:24:21) olivier.larcheveque: nous allons créer la même choses pour qu'on puisse ajouter des Ressources (14:25:01) olivier.larcheveque: une ressource est un document (fichier accompagné d'un titre selon moi) (14:25:07) olivier.larcheveque: allons dans le fichier project/support/models.py (14:25:16) olivier.larcheveque: il y a un modèle à créer (14:25:21) olivier.larcheveque: vous pouvez vous inspirer du modèle FAQ pour créer le votre (14:25:25) olivier.larcheveque: une fois votre modèle ajusté (14:25:31) olivier.larcheveque: faites (14:25:35) olivier.larcheveque: bin/django reset support (YES sans crainte) (14:25:59) olivier.larcheveque: ceci a pour effet de créer les tables en BD (14:26:40) olivier.larcheveque: (il se peut que vous ayez fait une erreur, pas de stress, la console va vous le dire...) (14:27:16) olivier.larcheveque: (en cas d'erreur il faut relancer le serveur, tant que l'erreur est présente elle il ne se redémarre pas) (14:28:02) olivier.larcheveque: Je vous laisse quelques minutes pour faire le modèle (14:28:09) olivier.larcheveque: j'apporte une solution à la fin (14:30:26) olivier.larcheveque: REMARQUE : si vous avez généré les tables en DB, puis remodifié le modèle par la suite (14:30:45) olivier.larcheveque: il est nécessaire de regénérer les tables (14:31:02) davin.baragiotta: QUESTION : comment, avec quelle commande déjà? (14:31:12) olivier.larcheveque: bin/django reset support (14:33:04) olivier.larcheveque: c'est ok pour le modèle support? (14:33:24) olivier.larcheveque: voici une solution (14:33:26) olivier.larcheveque: http://paste.pocoo.org/show/464971/ (14:34:19) olivier.larcheveque: bin/django reset support si vous utiliser cet exemple! (14:34:44) olivier.larcheveque: bon maintenant nous allons rendre ce modèle de données disponible dans l'interface admin (14:34:57) olivier.larcheveque: dans le fichier project/support/admin.py (14:35:27) olivier.larcheveque: c'est ici qu'on crée une classe Admin couplé à notre modèle de donnnées (14:36:05) olivier.larcheveque: la classe Admin fournit une multitude de possibilité pour spécifier le comportements des interfaces (14:36:24) olivier.larcheveque: nous on va faire ca simple ;) (14:37:03) olivier.larcheveque: suivez le TODO que j'ai mis dans ce fichier (14:37:07) olivier.larcheveque: (admin.py) (14:37:28) davin.baragiotta: semainetech_django/project/support/admin.py (14:38:13) olivier.larcheveque: NOTE : regarder bien la derniere ligne du fichier (14:38:31) olivier.larcheveque: elle permet de lier le modèle de données à son Admin (14:38:52) davin.baragiotta: QUESTION : admin.site.register(FAQ, FAQAdmin) ? (14:39:33) olivier.larcheveque: la classe d'admin est indépendante d'un modèle (14:40:18) olivier.larcheveque: on pourrait imaginer décrire une même classe Admin pour gérer des FAQ et des Ressources par exemple (14:40:40) olivier.larcheveque: c'est pour celà qu'il faut spécifier ce couplage (14:41:47) olivier.larcheveque: La classe Admin est utilisée pour générée la construction automatique des pages d'édition, création, suppression, liste (14:42:38) olivier.larcheveque: voici une solution (non PEP8 compliant...) (14:42:40) olivier.larcheveque: http://paste.pocoo.org/show/464974/ (14:43:04) olivier.larcheveque: à ajouter a la fin de project/support/admin.py (14:43:17) olivier.larcheveque: retourner explorer : (14:43:18) olivier.larcheveque: http://127.0.0.1:8000/admin/ (14:43:23) olivier.larcheveque: Normalement, le modèle Ressources apparait dans l'application "support" (14:43:29) olivier.larcheveque: Si c'est le cas, cliquez dessus pour aller a la page de liste (14:43:33) olivier.larcheveque: puis ajouter une ressource (lien en haut a droite) (14:43:45) olivier.larcheveque: on constate que les champs, sont rendus automiquement avec les bons widgets (titre = widget input test, fichier = widget upload de fichier) (14:44:28) olivier.larcheveque: nous allons améliorer notre admin maintenant (14:44:53) olivier.larcheveque: retourner dans le fichier support/admin.py (14:45:15) olivier.larcheveque: et on ajoute une variable dans la classe nommée "list_display" (14:45:34) olivier.larcheveque: http://paste.pocoo.org/show/466464/ (14:46:08) olivier.larcheveque: voyez la différence par rapport a tantot (14:46:33) olivier.larcheveque: http://127.0.0.1:8000/admin/support/ressource/ (14:46:58) olivier.larcheveque: la liste fait apparaitre la colonne titre à présent (14:47:42) olivier.larcheveque: la nous venons de voir le backend, l'admin Django en d'autres termes, pour créer le contenu (14:48:00) olivier.larcheveque: http://127.0.0.1:8000 (14:48:19) olivier.larcheveque: ici c'est le frontend, ou portail, ou pleins d'autres noms (14:48:34) olivier.larcheveque: on cherche à présenter l'information (14:49:12) olivier.larcheveque: on peut soit continuer sur le backend, ou explorer le frontend? (14:49:25) olivier.larcheveque: qu'est-ce que vous préférez? (14:49:41) olivier.larcheveque: (sachant que la fois passée j'ai parlé du frontend) (14:50:46) davin.baragiotta: chanesakhone.chitsaya: QUESTION: est-ce qu'on peut afficher tous les 2 deux (Titre et Ressource Object)?? (14:51:07) olivier.larcheveque: bon t'as question oriente ma question (14:51:10) olivier.larcheveque: ;) (14:51:55) olivier.larcheveque: nous allons dans la vue de la liste des ressources ajouter une autre colonne pour télécharger le fichier (14:52:08) olivier.larcheveque: (la réponse est oui donc) (14:52:30) olivier.larcheveque: retournons dans support/admin.py (14:52:46) olivier.larcheveque: dans la variable list_display = ('titre', ) (14:53:03) olivier.larcheveque: on va faire list_display = ('titre', '_download', ) (14:53:26) olivier.larcheveque: _download n'est pas une propriété du modèle (14:53:49) olivier.larcheveque: il va permettre de définir une méthode responsable d'afficher une donnée dans une colonne (14:54:08) olivier.larcheveque: c'est le meme principe que dans la classe FAQAdmin (14:54:17) olivier.larcheveque: pour _todo (14:54:36) davin.baragiotta: giotta: QUESTION : pourquoi '_download' si mon champ dans mon modèle s'appelle 'fichier' en suivant l'exemple de : http://paste.pocoo.org/show/464971/ (14:54:54) olivier.larcheveque: bonne question (14:55:18) olivier.larcheveque: modifie ton admin.py avec ca : list_display = ('titre', 'fichier', ) (14:55:27) olivier.larcheveque: regarde le résultat (14:59:47) olivier.larcheveque: il affiche le path du fichier normalement (15:00:12) olivier.larcheveque: mais ce qui serait bien, c'est un lien pour le télécharger (15:01:42) olivier.larcheveque: ok ca va? (15:01:53) davin.baragiotta: oui, pas de question (15:02:18) olivier.larcheveque: bon alors je vais vous donner le code de l'admin pour vous montrer le résultat (15:05:09) davin.baragiotta: REMARQUE : olivier.larcheveque code la fonction _download qui nous permettra de fournir un lien (au lieu d'afficher le path) dans la liste des objets ressources dans l'interface admin de Django (15:07:06) olivier.larcheveque: hopla (15:07:27) olivier.larcheveque: ;) désolé du blanc, peut-être vous avez été plus rapide que moi! (15:07:29) olivier.larcheveque: http://paste.pocoo.org/show/468369/ (15:08:16) olivier.larcheveque: ca conclut cet atelier (15:08:43) olivier.larcheveque: pour la création du frontend, je vous invite à consulter l'archive du premier atelier (15:09:26) olivier.larcheveque: (Début du prochain atelier dans 5min) (15:09:26) semainetech@reunion.auf.org: willy a changé le sujet en : ☞ Le salon de la Semaine Tech ☜ Atelier "AUFBook" https://wiki.auf.org/wikiteki/Projet/SemaineTech/Ateliers/AufBook (15:10:51) davin.baragiotta: ---------- FIN : Atelier : Django ---------------- }}}