2009-08-04 50 views
5

我一直在嘗試使用Markdown(2.0.1)& Pygments(1.0)在我簡單的Django(1.1)測試應用程序中獲取語法突出顯示。這個想法是從markdown格式的用戶輸入中生成HTML並將它們存儲在數據庫中,這樣我就不必在提取過程中對html進行標記。在Django中使用Markdown&Pygments語法突出顯示

到目前爲止,我有降價處理工作,但我似乎無法得到語法高亮工作。我的models.py如下:

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) 

到目前爲止測試只是降價語法工程,但如果我嘗試像我沒有看到任何語法輸出或輸出源強調以下幾點:

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

我期望在輸出源中看到至少一組代碼元素。

回答

3

修正了它!代碼應該縮進四個空格而不是三個!

在提出問題之前,我做了多次編輯來測試,但Firefox似乎將網頁緩存爲測試帖子。由於我一直使用Windows鍵盤快捷鍵來強制頁面重新加載而不是mac鍵盤快捷鍵,因此我確定了!

我發現它是工作時,我做了一個新的測試職位的挫折與四個空間縮進,然後檢查頁面源。

1

最好以降價格式將其存儲在數據庫中,然後在顯示時將其轉換爲您想要的顯示格式(HTML)。這樣,您可以按照您首先添加的方式編輯數據。

在您的模板的頂部,你應該包括:

{% load markup %} 

然後使用模板過濾器降價。

{{ blog_post.body|markdown}} 

然後只是使用CSS來確保你有正確的格式。如果你沒有在這裏,你也需要install the markdown package

,並在你的INSTALLED_APPS你的settings.py你應該包括 'django.contrib.markup'

For more information see this page

至於爲什麼你沒有看到格式化,檢查標記的來源,並確保它正常工作。即確保它正確地標記。然後確保你有所需的樣式表。

Markdown格式是標記之前的格式。

您還可以使用JQuery向已標記的元素添加一個類,以便您可以在不影響頁面其餘部分的情況下設置降格文本的樣式。

+0

我正在存儲用戶輸入的原始內容(因此他們可以繼續使用降價對其進行編輯),並且我還保存了處理後的輸出,因此我無需在每次使用時都將其轉換。 – Danielb 2009-08-04 01:46:51

+0

對於需要進行轉換的燈光處理,我認爲最好節省空間。我也討厭在兩個地方有同樣的事情,但也許這只是程序員的一部分。但這取決於你:) – 2009-08-04 01:49:34