2009-08-11 5 views
2

Ich habe eine django-powered Seite. Derzeit sind alle Textfelder einfach nur alte Texteingaben, die HTML-Rohdaten enthalten. Ich habe keinen schicken Editor oder so etwas. Ich würde gerne mit Markdown und WMD beginnen, um es allen leichter zu machen.Wie wechsle ich die Web App von HTML zu Markdown?

Muss ich irgendeine Art von Skript ausführen, um über jedes Textfeld in der Datenbank zu gehen, um das gesamte HTML in Markdown zu konvertieren? Wenn ich den HTML-Code durch den Markdown-Filter laufen lasse, wird er auf der anderen Seite gleich herauskommen? Wird der WMD-Editor den HTML-Code vom Server lesen und in Markdown konvertieren, damit der Benutzer ihn bearbeiten kann?

Was ist die richtige Vorgehensweise hier?

Antwort

0

Offenbar ist die Konvertierung des alten HTML in Markdown völlig unnötig. Ich habe den Filter django.contrib.markup.markdown auf meine Vorlagen angewendet, und der HTML-Code in den Legacy-Datenbankeinträgen wurde direkt übergeben. Markdown in Nicht-Legacy-Datensätzen wurde ebenfalls korrekt wiedergegeben.

Zugegeben, meine Webanwendung erlaubt es Benutzern nicht, diese Felder zu ändern, also ist es in Ordnung, HTML direkt durchzulassen. Wenn dies ein vom Benutzer editierbares Feld wäre, wie Kommentare oder ein Wiki, würde diese Lösung nicht ausreichen. Sie müssten den Safe-Parameter an den Markdown-Vorlagenfilter übergeben, wodurch der gesamte HTML-Code entfernt würde. Für HTML-Posts, die in HTML geschrieben wurden, wäre eine Konvertierung von HTML zu Markdown erforderlich.

Eine andere Lösung wäre in diesem Fall, einen neuen Vorlagenfilter zu schreiben, der den Markdown-Filter umschließt. Es würde ermöglichen, dass alte HTML-Posts durchgehen, aber den sicheren Markdown-Filter auf nicht-alte Posts anwenden.

2

WMD macht nicht Html-to-Markdown, nur umgekehrt; Sie können HTML in Markdown mit html2text konvertieren. WMD verwendet standardmäßig nur den ersten Textbereich als Markdown-Editor, aber Sie können dies überschreiben und Vorschaubilder hinzufügen - folgen Sie einfach den Anweisungen in den einfachen Beispielen, die mit WMD geliefert werden. Die API ändert sich sowieso (und zu seinem Dank macht der Autor kein Geheimnis daraus), da sich die ganzen Dinge zu einem wirklich Open-Source-Konzept bewegen, also ist es nicht wert, es jetzt im Detail zu erklären, noch irgendetwas Fantastisches auszuprobieren! -)

4

Wie ich auf your other question erwähnt habe, ist ein gutes Muster, wenn Abschrift verwendet wird, den Text in Abzinsung und html Format in Ihrer Datenbank zu speichern. Auf diese Weise müssen Sie nicht jedes Mal, wenn die Seite angezeigt wird, in HTML umwandeln, und es ist einfach, die ursprüngliche Abschrift im Admin zu bearbeiten.

Zum Beispiel könnte ein Blog app

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() 

    ... 

Dann in der Vorlage, Sie {{body_html|safe}} verwenden können.

Ich hoffe, das gibt Ihnen eine Vorstellung davon, wie Sie Ihre Modelle ändern möchten. Ich fürchte, ich habe keine Vorschläge, wie ich mit den Legacy-HTML-Daten umgehen soll.

1

Seien Sie vorsichtig bei der Verwendung der angenommenen Antwort. Standardmäßig wird beim Markieren von Text nicht darauf geachtet, unsichere Tags zu entfernen. Ein böswilliger Benutzer kann einfach HTML einfügen und sogar Skript-Tags einfügen. Die Verwendung von {{body_html | safe}} in der Vorlage würde bedeuten, dass das HTML oder Skript des Benutzers ausgeführt wird. Versuch es selber.

Verwandte Themen