2009-08-04 7 views
5

Ich habe versucht, Syntaxhervorhebung in meiner einfachen Django (1.1) -Test-App mit Markdown (2.0.1) & Segmente (1.0) zu arbeiten. Die Idee ist, HTML aus den Benutzereingaben, die im Markdown-Format sind, zu erzeugen und beide in der DB zu speichern, so dass ich die Abschrift zur HTML-Übersetzung während des Holens nicht machen muss.Syntax-Hervorhebung mit Markdown & Pygments in Django

Bisher habe ich die Markdown-Verarbeitung funktioniert, aber ich kann nicht scheinen, Syntax-Highlighting funktioniert. Mein models.py sieht wie folgt aus:

from django.db import models 
from django.contrib import admin 
from markdown import markdown 

class BlogPost(models.Model): 
    title = models.CharField(max_length = 150) 
    body = models.TextField() 
    body_html = models.TextField(editable=False, blank=True, null=True) 
    timestamp = models.DateTimeField() 

    def save(self): 
     self.body_html = markdown(self.body, ['codehilite']) 
     super(BlogPost, self).save() 

    class Meta: 
     ordering = ('-timestamp',) 

class BlogPostAdmin(admin.ModelAdmin): 
    list_display = ('title', 'timestamp') 

admin.site.register(BlogPost, BlogPostAdmin) 

Bisher nur Abschlags Syntax funktioniert testen, aber wenn ich versuche, so etwas wie das folgende ich hervorheben in der Ausgabe oder der Ausgangsquelle keine Syntax gesehen:

:::python 
    from foo import bar 
    foobar = bar('foo') 

Ich würde erwarten, mindestens eine Reihe von Code-Elementen in der Ausgabequelle zu sehen.

Antwort

3

Fehler behoben! Der Code sollte vier Leerzeichen und nicht drei eingerückt sein!

Ich habe mehrere Änderungen vorgenommen, um das zu testen, bevor Sie die Frage gestellt haben, aber es scheint, dass Firefox die Seite als Test-Post verwendet hat. Da ich die Windows-Tastaturverknüpfung verwendet habe, um eine Seite neu zu laden, nicht die Mac-Tastaturverknüpfung, d'oh!

Ich entdeckte es funktionierte, als ich aus Frust mit vier Raum Einrücken einen neuen Test Post gemacht und dann die Seite Quelle inspiziert.

+0

Anwendungs-Tastatur-Shorcuts, die auf verschiedenen Plattformen variieren sind solche Schmerzen. – Danielb

+0

Ich tausche Strg und Alt, wenn ich unter Windows arbeiten muss. Es löst nicht alles (wenn nur Windows-App-Autoren sich für einen Platz für ihre Voreinstellungen entscheiden würden!), Aber es hilft sicherlich. –

1

Es ist besser, es im Markdown-Format in der Datenbank zu speichern und es dann zum angezeigten Zeitpunkt in das gewünschte Präsentationsformat (HTML) zu konvertieren. Auf diese Weise können Sie Ihre Daten auf die gleiche Weise bearbeiten, wie Sie sie ursprünglich hinzugefügt haben.

An der Spitze der Vorlage sollten Sie umfassen:

{% load markup %} 

dann den Abschlag Template Filter verwenden.

{{ blog_post.body|markdown}} 

Dann verwenden Sie einfach CSS, um sicherzustellen, dass Sie die richtige Formatierung haben.

Sie müssen auch install the markdown package, wenn Sie es hier nicht haben.

Und in Ihrem settings.py in Ihrem INSTALLED_APPS sollten Sie 'django.contrib.markup'

For more information see this page umfassen.

Warum Sie keine Formatierung sehen, überprüfen Sie die markierte Quelle und stellen Sie sicher, dass sie richtig funktioniert. Stellen Sie sicher, dass es richtig markiert ist. Stellen Sie dann sicher, dass Sie die benötigten Stylesheets haben.

Markdown-Format ist das Format, bevor es markiert ist.

Sie können auch JQuery verwenden, um den markierten Elementen eine Klasse hinzuzufügen, damit Sie den Markdown-Text formatieren können, ohne den Rest der Seite zu beeinflussen.

+0

Ich speichere das Original, wie es vom Benutzer eingegeben wurde (damit es mit Markdown weiter bearbeiten kann), und ich speichere auch die verarbeitete Ausgabe, so dass ich sie nicht jedes Mal konvertieren muss, wenn sie benutzt wird. – Danielb

+0

Für die Lichtverarbeitung, die benötigt wird, um es zu konvertieren, denke ich, es ist besser, den Platz zu sparen.Ich hasse es auch, an zwei Orten dasselbe zu haben, aber vielleicht ist das nur ein Teil davon, ein Programmierer zu sein. Aber es liegt an dir :) –

+0

"Ich hasse es auch, an zwei Orten dasselbe zu haben, aber vielleicht ist das nur ein Teil davon, ein Programmierer zu sein." Heh, ich hasse die gleiche Arbeit zweimal, wenn ich nicht muss, auch ein Teil des Seins ein Programmierer;) – Danielb