Django-fr

Forum

#1 16-06-2012 14:31:11

Arnaud
Membre
Inscription : 16-06-2012
Messages : 14

Chaînes de filtres et conception

Bonjour à tous,

Débutant dans la programmation sous django, je me suis fixé comme objectif de migrer mon site actuellement sous CMS vers django, pour plus de souplesse, de contrôles, etc...

Je dois donc rapatrier des articles qui avaient un formatage particulier, me permettant d'insérer directement des éléments extérieurs via des balises personalisées, comme par exemple :

- $formule$ pour une formule latex,
- $$formule$$ pour une formule latex centrée,
- {app}...{/app} pour insérer un applet avec une figure dynamique,
- {asy}...{/asy} pour insérer une figure asymptote,
- {c}...{/c} pour une coloration syntaxique de code source,
- etc...

Au début, j'ai créé des filtres pour chacune de ses balises, qui en gros, récupèrent le contenu à l'aide des expressions régulières, pour le remplacer dans l'affichage de la page. Jusque là, pas trop de soucis.

Ce qui me gêne, c'est dans le template des articles, je me retrouve avec quelque chose de la forme :

{{ article|latex|code|applet|latexc|asymptote|...|... }}

et j'ai vraiment l'impression qu'on peut faire mieux, sauf que je n'ai pas assez de recul sur django pour savoir comment exactement.
Peut-être qu'il est possible de créer un filtre appelant tour à tour tous les autres, je n'en sais rien.
Et surtout, je ne sais pas si tout cela est réellement optimisé.

Avis au connaisseurs, toute indication sera la bienvenue, merci d'avance smile

Hors ligne

#2 17-06-2012 07:14:45

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : Chaînes de filtres et conception

Bonjour,

Pourquoi ne pas tout regrouper sous un seul filtre qui programmatiquement appelle chacun de tes filtres ? puisque cela à l'air d'être ce que tu cherches à faire ?

Cordialement,
Xavier Ordoquy,
Linovia.

Le 16 juin 2012 à 15:31, Arnaud a écrit :

> Bonjour à tous,
>
> Débutant dans la programmation sous django, je me suis fixé comme
> objectif de migrer mon site actuellement sous CMS vers django, pour plus de
> souplesse, de contrôles, etc...
>
> Je dois donc rapatrier des articles qui avaient un formatage particulier,
> me permettant d'insérer directement des éléments extérieurs via des
> balises personalisées, comme par exemple :
>
> - $formule$ pour une formule latex,
> - $$formule$$ pour une formule latex centrée,
> - {app}...{/app} pour insérer un applet avec une figure dynamique,
> - {asy}...{/asy} pour insérer une figure asymptote,
> - {c}...{/c} pour une coloration syntaxique de code source,
> - etc...
>
> Au début, j'ai créé des filtres pour chacune de ses balises, qui en
> gros, récupèrent le contenu à l'aide des expressions régulières, pour
> le remplacer dans l'affichage de la page. Jusque là, pas trop de soucis.
>
> Ce qui me gêne, c'est dans le template des articles, je me retrouve avec
> quelque chose de la forme :
>
>

{{ article|latex|code|applet|latexc|asymptote|...|... }}

>
> et j'ai vraiment l'impression qu'on peut faire mieux, sauf que je n'ai pas
> assez de recul sur django pour savoir comment exactement.
> Peut-être qu'il est possible de créer un filtre appelant tour à tour
> tous les autres, je n'en sais rien.
> Et surtout, je ne sais pas si tout cela est réellement optimisé.
>
> Avis au connaisseurs, toute indication sera la bienvenue, merci d'avance
> smile
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#3 17-06-2012 12:37:29

David Thenon
Membre
Inscription : 11-08-2010
Messages : 156
Site Web

Re : Chaînes de filtres et conception

Salut arnaud,

Il semble que tes contenus étaient rédigés avec une certaine syntaxe de mise
en forme (genre bbedit, markup, une syntaxe wiki, etc..), quelle est elle ?

Souvent les modules des parser/render de syntaxe de mise en forme sont assez
bien fait pour être étendu directement en Python pour ajouter des macros,
étendre leur format, etc..

À mon avis c'est ce chemin vers lequel tu devrais t'orienter.

Et si jamais tu n'utilisais pas de syntaxe particulière, alors c'est le moment
d'y passer et sera encore plus simple, je te conseillerais d'ailleurs quelque
chose comme du ReStructuredText.

Sinon en derniers recours comme l'a mentionné xavier, tu devrais te faire un
"templatetags" qui recoit ton article en premier argument et qui consommera le
contenu pour le transformer et appliquer tes "plugins" de syntaxe
supplémentaires. Tu peux même utiliser des arguments supplémentaires avec ton
templatetag pour activer/désactiver les plugins dont tu n'a pas besoin.

Hors ligne

#4 18-06-2012 23:11:16

Arnaud
Membre
Inscription : 16-06-2012
Messages : 14

Re : Chaînes de filtres et conception

Bonsoir et merci pour vos réponses.

Les articles étaient rédigés via un éditeur javascript usuel, qui fait quelque chose qui ressemble à du wysiwyg : http://www.queness.com/post/10363/10-fe … xt-editors

La syntaxe n'est donc pas particulière comme sur un wiki, ou du type markup, les articles sont enregistrés sous forme de html dans la bdd.

@David : je ne suis pas sûr d'avoir compris ta remarque sur les parser/render : il me semblait justement que l'équivalent de ces derniers sous django étaient les filtres, me suis-je trompé ?
Ou alors es-tu en train de me dire qu'il me suffit de compléter les éditeurs javascript dont je fais mention plus haut ?

Hors ligne

#5 19-06-2012 01:05:52

David Thenon
Membre
Inscription : 11-08-2010
Messages : 156
Site Web

Re : Chaînes de filtres et conception

> @David : je ne suis pas sûr d'avoir compris ta remarque sur les
> parser/render : il me semblait justement que l'équivalent de ces derniers
> sous django étaient les filtres, me suis-je trompé ?

Non je parlais des parsers générant des rendus pour les syntaxes wiki, ce sont
en général des modules hors de Django que tu appliques avec un filtre ou
templatetag (par exemple
https://docs.djangoproject.com/en/dev/ref/contrib/markup/), enfin bref ça ne
s'applique pas à toi qui gère directement du HTML.

Donc mon conseil pour ton désire de faire un peu plus simple et "propre" c'est
de te faire un templatetag qui accepte en premier argument le contenu (ton
html) auquel appliquer tes "macros" supplémentaires. On peut même imaginer un
second argument optionnel pour spécifier une liste des noms de tes macros à
utiliser.

Et ton templatetag se débrouile tout seul. Je crois qu'un "simple tags" doit
te suffire : https://docs.djangoproject.com/en/dev/howto/custom-template-
tags/#simple-tags

Hors ligne

#6 19-06-2012 08:44:03

Arnaud
Membre
Inscription : 16-06-2012
Messages : 14

Re : Chaînes de filtres et conception

Ok, merci du lien, je vais étudier cela wink

Hors ligne

Pied de page des forums