Question

J'ai un site alimenté django. À l'heure actuelle, tous les champs de texte ne sont que des entrées vieux texte brut qui prennent le HTML brut. Je n'ai pas éditeur de fantaisie ou de quoi que ce soit. Je voudrais commencer à utiliser Markdown et ADM pour faciliter les choses pour tout le monde.

Dois-je exécuter une sorte de script pour aller sur tous les champs de texte dans la base de données pour convertir tous les fichiers HTML à Markdown? Si je lance le code HTML à travers le filtre de démarquage, il va sortir même de l'autre côté? Est-ce que l'éditeur ADM lire le code HTML à partir du serveur et le convertir en Markdown pour l'utilisateur de modifier?

Quelle est la bonne mesure à prendre ici?

Était-ce utile?

La solution 4

Il semble convertir l'ancien HTML à démarquage est tout à fait inutile. J'ai appliqué le filtre django.contrib.markup.markdown à mes modèles et le code HTML dans les documents de base de données héritées était passé tout droit. Markdown dans les dossiers non traditionnels a également été rendu correctement.

D'accord, mon application Web ne permet pas aux utilisateurs à modifier ces champs, il est donc correct de laisser passer directement à travers HTML. Si tel était un champ modifiable par l'utilisateur, comme des commentaires ou un wiki, cette solution ne suffit pas. Vous devez passer le paramètre sécurité au filtre de modèle de démarquage, qui dépouillerait tout le HTML, et certains HTML à la conversion des démarques serait nécessaire pour les postes existants écrits en HTML.

Une autre solution, dans ce cas, serait d'écrire un nouveau filtre de modèle qui enveloppa le filtre démarquage. Il permettrait de vieux messages HTML de passer à travers, mais appliquer le filtre démarquage sécurité à des postes non traditionnels.

Autres conseils

Comme je l'ai mentionné votre autre question , un bon modèle lors de l'utilisation démarquage est de stocker le texte en Markdown et format 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 de modifier le démarquage d'origine 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 vous donne une idée de la façon dont vous pouvez modifier vos modèles. Je crains que je n'ai pas de suggestions sur la façon de gérer les données HTML existant.

ADM ne fait pas Html à démarquage, seul vice-versa; vous pouvez convertir le HTML en Markdown html2text . ADM par défaut utilise uniquement votre première zone de texte comme un éditeur de Markdown, mais vous pouvez passer outre aussi bien que ajouter des aperçus - il suffit de suivre les instructions des exemples simples qui viennent avec armes de destruction massive. L'API est en train de changer de toute façon (et, à son actif, l'auteur ne fait pas mystère de ce) que l'ensemble des choses se déplace à une plus vraiment notion open source, donc il ne vaut pas l'expliquer en détail en ce moment, ni d'essayer quoi que ce soit de fantaisie! -)

Attention lorsque vous utilisez la réponse acceptée. Par défaut, le marquage ne prend pas soin votre texte de suppression des balises dangereuses. Un utilisateur malveillant peut facilement insérer html et il peut même insérer des balises de script. L'utilisation {{body_html | sécurité}} dans le modèle signifierait l'exécution de code HTML ou un script de l'utilisateur. Essayez vous-même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top