Django-fr

Forum

#1 08-12-2010 15:31:51

bejazzy
Membre
Inscription : 11-08-2010
Messages : 31

Publication multi-format de textes sous Django

Bonjour à tous !

Mon intention est de loin de réinventer la roue, surtout quand vous lirez le
projet que j'ai en tête. Malgré mes pérégrinations sur la toile pour trouver
des ressources, des pistes et autres projets (libres) à grands coups de
moteur
de recherche, je n'ai pas encore trouver mon bonheur. Je fais donc appel à
vous et à vos connaissances/compétences pour éventuellement me guider.

Notation: 'rst' correspond à restructured Text (
http://docutils.sourceforge.net/rst.html)

* Présentation

Publication de documents sous différents formats possibles. À partir de
fichiers écrits en rst (ou éventuellement autre chose mais (1) je connais et
(2) pas mal de projets permettent de faire un tas de choses à partir de ça),
je souhaite générer du XHTML (pour voir les textes directement sur mon site
Web, vous l'avez deviné) et accessibles en téléchargement en rst, PDF, LaTeX
ou brut (sans balises).

Plusieurs projets font déjà ce genre de chose. Je souhaite intégrer en
quelques sorte leur boulot dans un site sous Django. Quand je parle de
projets, je parle du paquet python-docutils et du projet Sphinx entre autre.

Le but est aussi d'avoir la possibilté de mettre le nom de l'auteur, la
date,
la licence et le type de contenus: nouvelles, poésie (prose/vers) ou de
simples textes courts. Je pense me servir de Django pour trier, arranger et
choisir les textes (date, type, licence) que l'on souhaite
afficher/télécharger.


* Base de Données

Déjà, la première question que je me pose est: est-ce (vraiment) nécessaire?
Je me doute un peu des réponses: oui. Mais...

Pourquoi utiliser une base de données si l'on souhaite juste générer des
fichiers statiques en différents formats. Le projet Pelican d'Alexis
Métaireau
en est un bon exemple (http://alexis.notmyidea.org/pelican/). Il permet de
faire un blog à partir de fichiers rst accompagnés des informations
nécessaires comme:

  :date: 2010-10-19 10:42
  :tags: brainstorming
  :author: John Doe

Autre réflexion concernant les bases de données: quels système de gestion
choisir. Comment garantir la pérennité des données quand on veut par exemple
changer de système (arbitrairement de MySQL à PostgreSQL)? Peut-on perdre ou
corrompre des données lors d'un changement de versio,n 8.X en 9.X?

De plus, le contenu des données que je souhaite stocker se prête bien aux
bases NoSQL: MongoDB, CouchDB, ... Celles-ce sont de plus en plus supportées
par Django via différents projets (mais lequel choisir?). Et puis cela
dépend
aussi de l'hébergeur de mon site, si ce genre de techno est disponible ou
pas. À titre d'exemple:

  {'type': 'verse',
   'author': 'John Doe',
   'title': 'Empty Glass',
   'date': datetime_object,
   'license': 'creative common by-sa',
   'content': 'bla bla with a lot of rhymes (or not)'}

Un aspect que je trouve intéressant et le numéro de révision associé à
chaque
doucment. J'utilise moi-même un gestionnaire de version pour différents
documents (LaTeX, rst, ...) Pourquoi ne pas imaginer un couplage?


* Écriture/publication

La génération de divers formats à partir d'un fichier rst me semblent
l'opération la moins difficile. Néanmoins, plusieurs questions:

- La manière d'éditer un texte et de le mettre dans la base
   de données:
   (1) à partir de l'interface admin de Django
   (2) à partir d'un fichier rst
   (3) les deux

À ce jour, je ne vois pas comment, à partir de l'interface admin, modifier
et
mettre en page un texte simple: saut de ligne, interligne, texte en gras,
italique, et éventuellement changement de taille de la police. Tous ces
choses
doivent apparaitre dans le document publié, que ce soit en rst HMTL ou
PDF. Un poème en vers sans saut de ligne, c'est boarf...

- la possibilité de regénérer simplement l'ensemble des documents inclus
   dans la base de données en fichier texte.

- nécessité de supporter l'encodage UTF-8 à l'écriture/lecture/affichage
que
   ce soit dans l'interface admin de Django, dans les documents, à
l'affichage
   HTML... Tous mes documents textes sont en UTF-8.

Je suis sensible à la fonte et je souhaite profiter au mieux des
possibilités
de LaTeX et pourquoi pas jouer avec différents fontes. À l'opposé, je
souhaite
aussi avoir la possibilité de produire le texte brut, sans balises donc, et
de
n'avoir que les sauts de ligne/interlignes dans un fichier texte tout simple
(mais toujours avec le nom de l'auteur, date, licence, ...)


* Ressources

J'ai fouiller, lu en diagonal et continue de chercher.
Plusieurs pistes/sources:

- django.contrib.markup

- python-markdown2 (n'a pas l'air de générer autre chose que du XHTML/HTML)

- le site http://rst2a.com (sources dispo ?
   https://github.com/cablehead/rst2a date de mai 2008, très peu documenté,
   très peu suivi, vieilles dépendances)

- pelican: un blog en 'rst to HTML' sans base de données.

- http://www.bzdz.com/topic/view/17/ un billet de blog 'restructured text
on
    django'


Merci à vous et à bientôt.
Damien G.

Hors ligne

#2 08-12-2010 16:52:18

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

Re : Publication multi-format de textes sous Django

Salut,

Le mercredi 08 décembre 2010 15:31:51, Damien Garaud a écrit :
> Notation: 'rst' correspond à restructured Text (
> http://docutils.sourceforge.net/rst.html)
Très bon choix ReST, surtout avec les outils disponibles derrière (rst2** ,
sphinx, etc..).

> * Base de Données
>
> Déjà, la première question que je me pose est: est-ce (vraiment)
> nécessaire? Je me doute un peu des réponses: oui. Mais...

Je pense que vu tu souhaites rajouter une couche Django par dessus Sphinx pour
gérer différentes métas-données sur tes documents, ça serait plus aisé, tu a de
toute facon toujours la possibilité de récupérer tes documents en tant que
fichier *.rst dans ton application, mais surtout si tu souhaites gérer un
système de révision de tes documents ça semble le plus simple.

Et puis si tu veux des données facilement transportable, une base sqlite et
c'est réglé.

> Autre réflexion concernant les bases de données: quels système de gestion
> choisir. Comment garantir la pérennité des données quand on veut par
> exemple changer de système (arbitrairement de MySQL à PostgreSQL)? Peut-on
> perdre ou corrompre des données lors d'un changement de versio,n 8.X en
> 9.X?
Tu a pas mal d'applications Django qui te permettent de dumper tes données
d'un type de BDD à un autre cf
http://code.djangoproject.com/wiki/SchemaEvolution

> * Écriture/publication
>
> La génération de divers formats à partir d'un fichier rst me semblent
> l'opération la moins difficile. Néanmoins, plusieurs questions:
>
>  - La manière d'éditer un texte et de le mettre dans la base
>    de données:
>    (1) à partir de l'interface admin de Django
>    (2) à partir d'un fichier rst
>    (3) les deux
Réponse (3), l'éditeur en ligne dans l'interface d'administration des modèles
et un outil CLI dans le répertoire management/commands/ de ton application
pour importer des fichiers *.rst, le système intégré à Django est excellent.

> À ce jour, je ne vois pas comment, à partir de l'interface admin, modifier
> et
> mettre en page un texte simple: saut de ligne, interligne, texte en gras,
> italique, et éventuellement changement de taille de la police. Tous ces
> choses
> doivent apparaitre dans le document publié, que ce soit en rst HMTL ou
> PDF. Un poème en vers sans saut de ligne, c'est boarf...

Il faut que tu rajoutes un éditeur assisté à la syntaxe ReST dans le
change_form.html de l'admin de ton modèle de documents, un truc comme ça
http://kiwi.sveetch.net/BofEditor/#wikititle_10 par exemple, il doit y'en
avoir pas mal d'autres éditeurs assistés pour une syntaxe du genre "wiki"
(~=sans balises) qui traînent.

>  - la possibilité de regénérer simplement l'ensemble des documents inclus
>    dans la base de données en fichier texte.

Une simple routine de régénération de fichiers à ajouter dans la méthode save()
de ton modèle de document non ? De cette manière chaque document est régénérer
à chaque changement (à détecter).

>  - nécessité de supporter l'encodage UTF-8 à l'écriture/lecture/affichage
> que
>    ce soit dans l'interface admin de Django, dans les documents, à
> l'affichage
>    HTML... Tous mes documents textes sont en UTF-8.
Il n'y a rien à faire de particulier pour celà, à part mettre le bon "Content-
Type" dans les templates de ton frontend.

À mon avis le plus gros boulot c'est de modéliser ton application autour de
Sphinx, parce que à priori c'est probablement la meilleure solution, vu qu'il
gère déja à peu près tout ce que tu a besoin et qu'il est supporté par
rst2pdf.

Hors ligne

#3 08-12-2010 17:00:51

Jean Boussier
Membre
Inscription : 11-09-2010
Messages : 13

Re : Publication multi-format de textes sous Django

Le 8 déc. 2010 à 15:31, Damien Garaud a écrit :

>
>
> J'ai fouiller, lu en diagonal et continue de chercher.
> Plusieurs pistes/sources:
>
>  - django.contrib.markup
>
>  - python-markdown2 (n'a pas l'air de générer autre chose que du XHTML/HTML)
>
>  - le site http://rst2a.com (sources dispo ?
>    https://github.com/cablehead/rst2a date de mai 2008, très peu documenté,
>    très peu suivi, vieilles dépendances)
>
>  - pelican: un blog en 'rst to HTML' sans base de données.
>
>  - http://www.bzdz.com/topic/view/17/ un billet de blog 'restructured text on
>     django'

Tu as aussi http://www.txt2tags.org/ qui gère beaucoup de format.
Par contre le code n'est pas très modulaire.

Hors ligne

#4 09-12-2010 10:07:40

bejazzy
Membre
Inscription : 11-08-2010
Messages : 31

Re : Publication multi-format de textes sous Django

Merci pour les retours et conseils.

@Jean: j'ai jeté un rapide coup d'oeil txt2tags. Un gros travail
d'internationalisation semble avoir été effectué. Par contre, pratiquement
tout code se trouve dans un fichier de près de 6000 lignes !!

@David: merci de tes conseils et pour les liens.

Pour ce qui est du 'ReST to HTML' en Django, c'est très simple. En supposant
que le contenu de votre texte stocké dans la base de données est en ReST, il
suffit de:

   1. ajouter 'django.contrib.markup' dans la variable 'INSTALL_APPS' du
fichier de configuration 'settings.py'.
   2. Dans le template, {% load markup %} puis appliquer le filtre au
contenu en ReST de votre instance de modèle avec {{
text.content|restructuredtext }}.

Je vous tiendrais au jus de mon avancement (avec j'espère, une publication
du code à la clé). Et puis, j'aurais sûrement d'autres questions.

Bonne journée
Damien

2010/12/8 Jean Boussier <jean.boussier _AT_ gmail.com>

> Le 8 déc. 2010 à 15:31, Damien Garaud a écrit :
>
>
>
> J'ai fouiller, lu en diagonal et continue de chercher.
> Plusieurs pistes/sources:
>
>  - django.contrib.markup
>
>  - python-markdown2 (n'a pas l'air de générer autre chose que du
> XHTML/HTML)
>
>  - le site http://rst2a.com (sources dispo ?
>    https://github.com/cablehead/rst2a date de mai 2008, très peu
> documenté,
>    très peu suivi, vieilles dépendances)
>
>  - pelican: un blog en 'rst to HTML' sans base de données.
>
>  - http://www.bzdz.com/topic/view/17/ un billet de blog 'restructured text
> on
>     django'
>
>
> Tu as aussi http://www.txt2tags.org/ qui gère beaucoup de format.
> Par contre le code n'est pas très modulaire.
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>

Hors ligne

#5 10-12-2010 01:38:49

Olivier Meunier
Membre
Inscription : 11-08-2010
Messages : 29

Re : Publication multi-format de textes sous Django

Le 08/12/10 15:31, Damien Garaud a écrit :
> * Base de Données
>
> Déjà, la première question que je me pose est: est-ce (vraiment) nécessaire?
> Je me doute un peu des réponses: oui. Mais...

Si tu veux faire du versionning, une idée peut-être d'utiliser
directement mercurial, c'est en python et les api sont assez propres.

Rien n'interdit ensuite d'indexer les infos pour faire des recherches.

Hors ligne

Pied de page des forums