2009-08-04 40 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