2009-08-04 5 views
5

Ho cercato di ottenere l'evidenziazione della sintassi lavorando nella mia semplice applicazione di prova Django (1.1) utilizzando Markdown (2.0.1) & Pygments (1.0). L'idea è di generare HTML dall'input degli utenti che è in formato markdown e di archiviarli entrambi nel DB, quindi non devo fare il markdown alla traduzione html durante il recupero.Evidenziazione della sintassi con Markdown & Pygments in Django

Finora l'elaborazione del markdown funziona, ma non riesco a visualizzare l'evidenziazione della sintassi. Il mio models.py assomiglia a questo:

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) 

Finora collaudo opere di sintassi appena riduzione dei prezzi, ma se provo qualcosa come il seguente io non visto alcuna evidenziazione della sintassi in uscita o la sorgente di uscita:

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

Mi aspetto di vedere almeno un set di elementi di codice nella sorgente di output.

risposta

3

Risolto il problema! Il codice avrebbe dovuto essere rientrato di quattro spazi non tre!

Ho apportato più modifiche per verificarlo prima di porre la domanda, ma sembra che Firefox abbia memorizzato nella cache la pagina come se fosse un post di test. Come ho usato la scorciatoia da tastiera di Windows per forzare una pagina di ricaricare non la scorciatoia da tastiera mac, d'oh!

Ho notato che funzionava quando ho creato un nuovo post di test per la frustrazione con quattro rientri dello spazio e poi ispezionato la sorgente della pagina.

+0

Shorcuts da tastiera delle applicazioni che variano su più piattaforme sono un tale dolore – Danielb

+0

Cambio Ctrl e Alt quando devo lavorare su Windows. Non risolve tutto (se solo gli autori di app di Windows decidono su un posto per i loro menu Preferenze!) Ma certamente aiuta. –

1

È meglio memorizzarlo nel database in formato contrassegno, quindi convertirlo nel formato di presentazione desiderato (HTML) al momento della visualizzazione. In questo modo puoi modificare i tuoi dati nello stesso modo in cui l'hai aggiunto in primo luogo.

Nella parte superiore del vostro modello si dovrebbe includere:

{% load markup %} 

quindi utilizzare il mark-down del filtro modello.

{{ blog_post.body|markdown}} 

Quindi basta usare css per assicurarsi di avere la formattazione corretta.

È inoltre necessario install the markdown package se non si dispone qui.

E nel tuo settings.py nel vostro INSTALLED_APPS si dovrebbe includere 'django.contrib.markup'

For more information see this page.

Per quanto riguarda il motivo per cui non si vede la formattazione, controllare la fonte contrassegnata e assicurarsi che funzioni correttamente. ad esempio, assicurarsi che sia marcato correttamente. Quindi assicurati di avere i fogli di stile necessari.

Il formato del contrassegno è il formato prima che venga contrassegnato.

È inoltre possibile utilizzare JQuery per aggiungere una classe agli elementi contrassegnati, in modo da poter applicare uno stile al testo della riduzione di profitto senza influire sul resto della pagina.

+0

Sto memorizzando l'originale come inserito dall'utente (in modo che possano continuare a modificarlo con markdown) e sto anche salvando l'output elaborato in modo da non doverlo convertire ogni volta che viene utilizzato. – Danielb

+0

Per l'elaborazione della luce necessaria per convertirlo, penso che sia meglio risparmiare spazio.Odio anche avere la stessa cosa in 2 posti, ma forse è solo una parte dell'essere un programmatore. Ma tocca a te :) –

+0

"Odio anche avere la stessa cosa in 2 posti, ma forse è solo una parte dell'essere un programmatore." Heh, odio fare lo stesso lavoro due volte se non devo, anche parte di essere un programmatore;) – Danielb