2009-08-04 10 views
5

J'ai essayé d'obtenir la coloration syntaxique en travaillant dans mon application de test simple Django (1.1) en utilisant Markdown (2.0.1) & Pygments (1.0). L'idée est de générer du HTML à partir de l'entrée des utilisateurs qui est au format markdown et de stocker les deux dans la base de données afin que je n'ai pas à faire la démarque de la traduction html pendant le fetch. Jusqu'à présent, le traitement des démarques fonctionne, mais je n'arrive pas à faire fonctionner la coloration syntaxique. Mon models.py ressemble à ceci:Mise en surbrillance de syntaxe avec Markdown & Pygments dans Django

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) 

test Jusqu'à présent, juste des œuvres de syntaxe Markdown mais si je tente quelque chose comme je ne vu aucune coloration syntaxique dans la sortie ou la source de sortie:

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

Je m'attendrais à voir au moins un ensemble d'éléments de code dans la source de sortie.

Répondre

3

Correction du problème! Le code aurait dû être indenté de quatre espaces et non de trois!

J'ai effectué plusieurs modifications pour tester cela avant de poser la question, mais il semblerait que Firefox soit mis en cache dans la page en tant que test. Comme j'avais utilisé le raccourci clavier Windows pour forcer une page à recharger pas le raccourci clavier mac, d'oh!

J'ai remarqué que cela fonctionnait lorsque j'ai fait un nouveau test de frustration avec quatre empreintes d'espace, puis j'ai inspecté la source de la page.

+0

sont une telle douleur. – Danielb

+0

J'échange Ctrl et Alt lorsque je dois travailler sur Windows. Cela ne résout pas tout (si seulement les auteurs de l'application Windows décidaient d'une place pour leurs menus Préférences!) Mais cela aide certainement. –

1

Il est préférable de le stocker dans la base de données au format markdown, puis de le convertir au format de présentation que vous souhaitez (HTML) au moment de l'affichage. De cette façon, vous pouvez modifier vos données de la même manière que vous l'avez ajouté en premier lieu.

Au sommet de votre modèle, vous devez inclure:

{% load markup %} 

Ensuite, utilisez le filtre minorée de modèle. Ensuite, utilisez simplement css pour vous assurer que vous avez la bonne mise en forme. Vous avez également besoin de install the markdown package si vous ne l'avez pas ici.

Et dans votre settings.py dans votre INSTALLED_APPS vous devez inclure 'django.contrib.markup'

For more information see this page.

Pour ce qui est du formatage, vérifiez la source balisée et assurez-vous qu'elle fonctionne correctement. c'est-à-dire assurez-vous que le marquage est correct. Ensuite, assurez-vous d'avoir les feuilles de style nécessaires.

Le format de démarquage est le format avant qu'il ne soit balisé.

Vous pouvez également utiliser JQuery pour ajouter une classe aux éléments balisés, afin de pouvoir personnaliser le texte de la marque sans affecter le reste de la page.

+0

Je stocke l'original tel que saisi par l'utilisateur (afin qu'ils puissent continuer à le modifier avec markdown) et je sauvegarde également la sortie traitée de sorte que je n'ai pas besoin de le convertir chaque fois qu'il est utilisé. – Danielb

+0

Pour le traitement de la lumière qui est nécessaire pour le convertir, je pense qu'il vaut mieux économiser de l'espace.Je déteste aussi avoir la même chose à deux endroits, mais c'est peut-être juste une partie du métier de programmeur. Mais ça dépend de vous :) –

+0

"Je déteste aussi avoir la même chose à 2 endroits, mais peut-être que c'est juste une partie de la programmation." Heh, je déteste faire le même travail deux fois si je ne dois pas, aussi partie d'être un programmeur;) – Danielb

Questions connexes