Django-fr

Forum

#1 14-07-2012 14:23:25

thomfort
Membre
Inscription : 13-12-2010
Messages : 6

Django 1.4 - Template Dashboard

Bonjour,

Je suis relativement nouveau dans le monde de Django. Je l'utilise pour un projet personnel et je bloque à un endroit.

Pour le moment j'ai 2 apps. La principale contient un template dashboard qui affichera les informations des autres apps. J'ai structuré ma 2e apps pour qu'elle aille ses propres templates pour que je puisse insérer ensuite dans le dashboard de la 1ere apps. Voilà, je suis incapable de faire cette dernière étape. J'imaginais utiliser {% include %}, mais l'objet ne suit pas. Ensuite, je me suis dit que j'utiliserais la view de ma 1ere apps pour faire mes requêtes, mais sa m'énerve au plus profond de mettre ça à la mauvaise place.

Auriez-vous une façons dont je pourrais structuré ça?

Cordialement,

Hors ligne

#2 14-07-2012 14:29:40

ksamuel
Modérateur
Inscription : 22-06-2012
Messages : 40
Site Web

Re : Django 1.4 - Template Dashboard

Bonjour,

Il va être dur de vous aider sans avoir le détail de tout le code.

Dans tous les cas:

- "include" est rarement la solution. La plupart des structures de
template en Django utilisent "extends". "include" prend un template,
fais un render dessus, et l'insère là où il y a le tag alors que
"extends" fait un render sur le template courrant, et l'enrobe dans le
template qu'il étend.
- je suis 100% pour structurer son projet en plein de sous apps, mais
il ne faut pas tomber dans l'abus. Je n'ai pas la main sur le code donc
je ne peux pas juger, mais est-il indispensable d'avoir deux apps ici ?



Le sam. 14 juil. 2012 15:23:25 CEST, thomfort a écrit :
> Bonjour,
>
> Je suis relativement nouveau dans le monde de Django. Je l'utilise pour un
> projet personnel et je bloque à un endroit.
>
> Pour le moment j'ai 2 apps. La principale contient un template dashboard
> qui affichera les informations des autres apps. J'ai structuré ma 2e apps
> pour qu'elle aille ses propres templates pour que je puisse insérer
> ensuite dans le dashboard de la 1ere apps. Voilà, je suis incapable de
> faire cette dernière étape. J'imaginais utiliser {% include %}, mais
> l'objet ne suit pas. Ensuite, je me suis dit que j'utiliserais la view de
> ma 1ere apps pour faire mes requêtes, mais sa m'énerve au plus profond de
> mettre ça à la mauvaise place.
>
> Auriez-vous une façons dont je pourrais structuré ça?
>
> Cordialement,
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#3 14-07-2012 17:48:04

Christophe, Jean-Charles Narbonne
Membre
Inscription : 23-06-2011
Messages : 30

Re : Django 1.4 - Template Dashboard

Kevin propose une réponse juste et pertinante, néanmoins, dans ton cas de
menu,
l'include ne me parait ni mal ni innadapté.

Pour ma part, il m'arrive de l'utiliser pour le rendering de ligne de
tableaux complexe ou il m'arrive de rafraichir en ajax des lignes
individuelles.

Donc, à ta place ton application d'aiguillage, ton menu, si tu le veux
générique et réutilisabe doit avoir pour paramettre une liste
d'applications ou de templates à inclures, je dirais d'application.

Tu peux imposer la contrainte d'avoir un template
{{nom_de_l'app}}/menu_part.html qui n'hériterai pas de base.html.

Comme include attends un string, tu peux facilement itérer sur la liste des
apps et inclure ça.

Si c'est ce que tu veux faire, le plus compliqué maintenant c'est d'avoir
un bon rendu avec un nombre d'application dans le menu dynamique, bonne
chance.


2012/7/14 Kevin Samuel <kevsamuel _AT_ myopera.com>

> Bonjour,
>
> Il va être dur de vous aider sans avoir le détail de tout le code.
>
> Dans tous les cas:
>
> - "include" est rarement la solution. La plupart des structures de
> template en Django utilisent "extends". "include" prend un template,
> fais un render dessus, et l'insère là où il y a le tag alors que
> "extends" fait un render sur le template courrant, et l'enrobe dans le
> template qu'il étend.
> - je suis 100% pour structurer son projet en plein de sous apps, mais
> il ne faut pas tomber dans l'abus. Je n'ai pas la main sur le code donc
> je ne peux pas juger, mais est-il indispensable d'avoir deux apps ici ?
>
>
>
> Le sam. 14 juil. 2012 15:23:25 CEST, thomfort a écrit :
> > Bonjour,
> >
> > Je suis relativement nouveau dans le monde de Django. Je l'utilise pour
> un
> > projet personnel et je bloque à un endroit.
> >
> > Pour le moment j'ai 2 apps. La principale contient un template dashboard
> > qui affichera les informations des autres apps. J'ai structuré ma 2e apps
> > pour qu'elle aille ses propres templates pour que je puisse insérer
> > ensuite dans le dashboard de la 1ere apps. Voilà, je suis incapable de
> > faire cette dernière étape. J'imaginais utiliser {% include %}, mais
> > l'objet ne suit pas. Ensuite, je me suis dit que j'utiliserais la view de
> > ma 1ere apps pour faire mes requêtes, mais sa m'énerve au plus profond de
> > mettre ça à la mauvaise place.
> >
> > Auriez-vous une façons dont je pourrais structuré ça?
> >
> > Cordialement,
> > _______________________________________________
> > django mailing list
> > django _AT_ lists.afpy.org
> > http://lists.afpy.org/mailman/listinfo/django
>
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>

Hors ligne

#4 14-07-2012 18:44:40

ksamuel
Modérateur
Inscription : 22-06-2012
Messages : 40
Site Web

Re : Django 1.4 - Template Dashboard

En effet l'include n'est pas mal ni inadapté pour une menu. Néanmoins
la manière standard en django de le faire est (sauf cas spécifique
dynamique très particulier):

- Un fichier base.html qui contient:

header

{% block menu %}
html du menu par default sur toute les pages
{% endblock %}

footer

- un fichier bidule.html qui fait:

extends base.html

code html normal

- et dans le cas d'un fichidr qui a besoin d'un menu particulier:

truc.html:

extends base.html

{% block menu %}
code du menu particulier qui override le précédent
{% endblock %}

reste du code html normal

Normalement ceci couvre 99% des cas de menus.

Le sam. 14 juil. 2012 18:48:04 CEST, Christophe Narbonne a écrit :
> Kevin propose une réponse juste et pertinante, néanmoins, dans ton cas
> de menu,
> l'include ne me parait ni mal ni innadapté.
>
> Pour ma part, il m'arrive de l'utiliser pour le rendering de ligne de
> tableaux complexe ou il m'arrive de rafraichir en ajax des lignes
> individuelles.
>
> Donc, à ta place ton application d'aiguillage, ton menu, si tu le veux
> générique et réutilisabe doit avoir pour paramettre une liste
> d'applications ou de templates à inclures, je dirais d'application.
>
> Tu peux imposer la contrainte d'avoir un template
> {{nom_de_l'app}}/menu_part.html qui n'hériterai pas de base.html.
>
> Comme include attends un string, tu peux facilement itérer sur la
> liste des apps et inclure ça.
>
> Si c'est ce que tu veux faire, le plus compliqué maintenant c'est
> d'avoir un bon rendu avec un nombre d'application dans le menu
> dynamique, bonne chance.
>
>
> 2012/7/14 Kevin Samuel <kevsamuel _AT_ myopera.com
> <mailto:kevsamuel _AT_ myopera.com>>
>
>     Bonjour,
>
>     Il va être dur de vous aider sans avoir le détail de tout le code.
>
>     Dans tous les cas:
>
>     - "include" est rarement la solution. La plupart des structures de
>     template en Django utilisent "extends". "include" prend un template,
>     fais un render dessus, et l'insère là où il y a le tag alors que
>     "extends" fait un render sur le template courrant, et l'enrobe dans le
>     template qu'il étend.
>     - je suis 100% pour structurer son projet en plein de sous apps, mais
>     il ne faut pas tomber dans l'abus. Je n'ai pas la main sur le code
>     donc
>     je ne peux pas juger, mais est-il indispensable d'avoir deux apps
>     ici ?
>
>
>
>     Le sam. 14 juil. 2012 15:23:25 CEST, thomfort a écrit :
>     > Bonjour,
>     >
>     > Je suis relativement nouveau dans le monde de Django. Je
>     l'utilise pour un
>     > projet personnel et je bloque à un endroit.
>     >
>     > Pour le moment j'ai 2 apps. La principale contient un template
>     dashboard
>     > qui affichera les informations des autres apps. J'ai structuré
>     ma 2e apps
>     > pour qu'elle aille ses propres templates pour que je puisse insérer
>     > ensuite dans le dashboard de la 1ere apps. Voilà, je suis
>     incapable de
>     > faire cette dernière étape. J'imaginais utiliser {% include %}, mais
>     > l'objet ne suit pas. Ensuite, je me suis dit que j'utiliserais
>     la view de
>     > ma 1ere apps pour faire mes requêtes, mais sa m'énerve au plus
>     profond de
>     > mettre ça à la mauvaise place.
>     >
>     > Auriez-vous une façons dont je pourrais structuré ça?
>     >
>     > Cordialement,
>     > _______________________________________________
>     > django mailing list
>     > django _AT_ lists.afpy.org <mailto:django _AT_ lists.afpy.org>
>     > http://lists.afpy.org/mailman/listinfo/django
>
>
>     _______________________________________________
>     django mailing list
>     django _AT_ lists.afpy.org <mailto:django _AT_ lists.afpy.org>
>     http://lists.afpy.org/mailman/listinfo/django
>
>
>
>
> --
> Best regards,
> Christophe Narbonne
>
> http://blogs.dotnet-france.com/christophen/
>
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#5 15-07-2012 06:00:44

thomfort
Membre
Inscription : 13-12-2010
Messages : 6

Re : Django 1.4 - Template Dashboard

Bonjour,

Merci pour vos réponses et pour l'éclaircissement de include et extends.

Voici quelques détails par rapport à mes apps et aussi une clarification de ma problématique, car je ne vous cacherai pas que vous m'avez un peu perdu wink

Je fais un site de rating d'item et de personne. Mon projet se nomme "AAA". (J'utilise django 1.4)

J'ai une apps qui se nomme donc "AAA" dans laquelle je met mon template de "base.html" et "dashboard.html".

Ensuite, j'ai une autre Apps qui se nomme "CLIENT". Dans celle-ci, j'ai les templates de base pour le CRUD.

Pour le moment, j'ai que 2 apps. (Prochainement, j'aurai d'autre apps qui se linkerons)

Ce que je veux faire, c'est d'avoir sur le dashboard("AAA") des informations relatives à l'apps "CLIENT", car je risque de réutiliser c'est template(partial). Par exemple, j'aimerais afficher les 10 dernières personnes qui ont été évaluées. Pour ce faire, je voudrais faire mon template dans mon apps "CLIENT" et l'afficher sur le dashboard de l'apps "AAA" et je n'y arrive pas pour le moment sans m'énerver wink Le modèle MVC (MVT) peut-être un peu mélangeant dès qu'on sort un peu de sentier battu...

Cordialement,

Hors ligne

#6 15-07-2012 06:18:00

ksamuel
Modérateur
Inscription : 22-06-2012
Messages : 40
Site Web

Re : Django 1.4 - Template Dashboard

A moins de vouloir faire une app de dashboard générique (je ne pense
pas que ce soit une bonne idée à ce stade d'apprentissage), AAA est
votre application glue. C'est à dire qu'elle va faire le lien entre
toutes les autres applications.

Dans ce cas précis, cette application peut ne pas être réutilisable et
être fortement couplée aux autres applications (elles découplées).
Ainsi, il est tout à fait acceptable de faire une application "mashup"
avec plein de code en dur utilisant le code des autres applications
dedans.  Cela sera très rapide de modifier son code pour la faire
évoluer, et ne gachera pas du tout votre productivité sur le long terme.

Ce que vous voulez faire, fournir une sorte de widget réutilisable
injectable dans un dashboard, est louable et tout à fait possible : il
faudra jouer avec "extends" et "include" en même temps. Mais c'est à
mon sens trop d'un coup. Votre "widget" ne sera jamais réutilisé . Il
est beaucoup plus simple de coder directement dans dashboard.html
chaque widget (et c'est tout à fait propre, puisque AAA n'a pas a être
réutilisable). Même si vous arriviez à créer un widget parfaitement
générique et injectable partout, il y a biens d'autres considérations
(extensibilité, template tag, injection de contexte, gestion de
plusieurs version de HTML, dépendances de CSS, standardisation des
liens) à prendre en compte pour que le widget est vraiment de la valeur
dans un contexte Django pour tous (ou alors ça n'a pas de sens de le
faire générique).

Je comprends que vous vouliez apprendre en le faisant, mais justement
(je suis formateur :-)), je vous recommande de ne pas le faire et
d'apprendre le reste avant. Je code très souvent des applications AAA
pleines de code non réutilisables. L'équilibre en la généricité et la
productivité se trouve petit à petit.

Si vraiment vous souhaitez à tout prix créer ce widget dans un template
de l'app CLIENT, alors il va falloir nous donner plus de détails que
"ça ne marche pas":

- code complet
- ce que ça fait au lieu de ce que vous voudriez que ça fasse (y
compris rendu, données manquantes, message d'erreur, etc).

Le dim. 15 juil. 2012 07:00:45 CEST, thomfort a écrit :
> Bonjour,
>
> Merci pour vos réponses et pour l'éclaircissement de include et extends.
>
> Voici quelques détails par rapport à mes apps et aussi une clarification
> de ma problématique, car je ne vous cacherai pas que vous m'avez un peu
> perdu wink
>
> Je fais un site de rating d'item et de personne. Mon projet se nomme
> "AAA". (J'utilise django 1.4)
>
> J'ai une apps qui se nomme donc "AAA" dans laquelle je met mon template de
> "base.html" et "dashboard.html".
>
> Ensuite, j'ai une autre Apps qui se nomme "CLIENT". Dans celle-ci, j'ai
> les templates de base pour le CRUD.
>
> Pour le moment, j'ai que 2 apps. (Prochainement, j'aurai d'autre apps qui
> se linkerons)
>
> Ce que je veux faire, c'est d'avoir sur le dashboard("AAA") des
> informations relatives à l'apps "CLIENT", car je risque de réutiliser
> c'est template(partial). Par exemple, j'aimerais afficher les 10 dernières
> personnes qui ont été évaluées. Pour ce faire, je voudrais faire mon
> template dans mon apps "CLIENT" et l'afficher sur le dashboard de l'apps
> "AAA" et je n'y arrive pas pour le moment sans m'énerver wink Le modèle MVC
> (MVT) peut-être un peu mélangeant dès qu'on sort un peu de sentier
> battu...
>
> Cordialement,
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#7 15-07-2012 15:00:46

thomfort
Membre
Inscription : 13-12-2010
Messages : 6

Re : Django 1.4 - Template Dashboard

Bonjour ksamuel,

Votre explication ne peut être plus clair. Je ne suis effectivement pas en train de vouloir faire un widget 100% générique, mais simplement de faire une application "mashup".

Merci pour vos conseils, c'est très apprécié. Je me lance!

Cordialement,

Hors ligne

Pied de page des forums