2009-08-11 6 views
2

J'ai un site alimenté par django. Actuellement, tous les champs de texte sont simplement de vieilles entrées de texte qui prennent du HTML brut. Je n'ai aucun éditeur de fantaisie ou quoi que ce soit. Je voudrais commencer à utiliser Markdown et WMD pour rendre les choses plus faciles pour tout le monde. Dois-je exécuter une sorte de script pour parcourir tous les champs de texte de la base de données afin de convertir tout le code HTML en démarque? Si je cours le HTML à travers le filtre de démarquage, est-ce que ça sortira pareil de l'autre côté? L'éditeur WMD va-t-il lire le HTML du serveur et le convertir en Markdown pour que l'utilisateur puisse le modifier?Comment passer de l'application web du HTML au Markdown?

Quelle est la ligne de conduite correcte ici?

Répondre

0

Apparemment, la conversion de l'ancien code HTML en redimensionnement est totalement inutile. J'ai appliqué le filtre django.contrib.markup.markdown à mes modèles, et le code HTML dans les enregistrements de base de données hérités a été transmis directement. Le démarquage dans les enregistrements non-legacy a également été rendu correctement.

D'accord, mon application Web ne permet pas aux utilisateurs de modifier ces champs, donc il est correct de laisser passer le HTML directement. S'il s'agissait d'un champ modifiable par l'utilisateur, comme des commentaires ou un wiki, cette solution ne suffirait pas. Vous devez transmettre le paramètre safe au filtre du modèle markdown, ce qui supprime tout le code HTML, et une conversion HTML en markdown est nécessaire pour les publications héritées écrites en HTML. Dans ce cas, une autre solution consisterait à écrire un nouveau filtre de gabarit enveloppant le filtre de démarquage. Il permet aux anciens messages HTML de passer, mais applique le filtre de démarquage sécurisé aux publications non héritées.

2

WMD ne fait pas Html-à-démarque, seulement viceversa; vous pouvez convertir HTML à démarquer avec html2text. WMD par défaut utilise uniquement votre première zone de texte en tant qu'éditeur de démarques, mais vous pouvez outrepasser cela et ajouter des aperçus - suivez simplement les instructions dans les exemples simples fournis avec WMD. L'API change de toute façon (et, à son crédit, l'auteur n'en a aucun mystère) alors que le tout évolue vers un concept plus open-source, donc ça ne vaut pas la peine de l'expliquer en détail, ni d'essayer quoi que ce soit! -

4

Comme je l'ai mentionné sur your other question, un bon motif lorsque vous utilisez markdown est de stocker le texte au format markdown et html dans votre base de données. De cette façon, vous n'avez pas besoin de convertir en HTML à chaque fois que la page est affichée, et il est facile d'éditer la démarque originale dans l'admin.

Par exemple, une application de blog peut avoir

class BlogPost(models.Model): 

    ... 

    body = models.TextField(help_text='Use Markdown syntax.') 
    #field to store generated html 
    body_html = models.Textfield(editable=False, blank=True) 

    ... 

    def save(self): 
     body_html=markdown(self.body) 
     super(BlogPost, self).save() 

    ... 

Ensuite, dans le modèle, vous pouvez utiliser {{body_html|safe}}. J'espère que cela vous donne une idée de la façon dont vous voudrez peut-être modifier vos modèles. J'ai peur de ne pas avoir de suggestions sur la façon de gérer les données html existantes.

1

Faites attention en utilisant la réponse acceptée. Par défaut, le marquage de votre texte ne prend pas en charge la suppression des tags non sécurisés. Un utilisateur malveillant peut facilement insérer html et il peut même insérer des balises de script. L'utilisation de {{body_html | safe}} dans le modèle signifierait l'exécution du code HTML ou du script de l'utilisateur. Essayez-le vous-même.

Questions connexes