5

我一直在尝试使用 Markdown (2.0.1) 和 Pygments (1.0) 在我的简单 Django (1.1) 测试应用程序中实现语法高亮。这个想法是从用户输入中生成降价格式的 HTML,并将两者都存储在数据库中,这样我就不必在获取期间进行降价到 html 的翻译。

到目前为止,我的降价处理工作正常,但我似乎无法让语法突出显示工作。我的 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')

我希望在输出源中至少看到一组代码元素。

4

2 回答 2

3

解决它!代码应该缩进四个空格而不是三个!

在提出问题之前,我进行了多次编辑以对其进行测试,但似乎 Firefox 将页面缓存为用作测试帖子。因为我一直在使用 windows 键盘快捷键来强制页面重新加载,而不是 mac 键盘快捷键,d'oh!

当我对四个空格缩进感到沮丧,然后检查页面源时,我发现它正在工作。

于 2009-08-04T02:07:20.807 回答
1

最好将其以markdown格式存储在数据库中,然后在显示时将其转换为您想要的演示格式(HTML)。这样,您就可以像最初添加数据一样编辑数据。

在模板的顶部,您应该包括:

{% load markup %}

然后使用模板过滤器降价。

{{ blog_post.body|markdown}}

然后只需使用 css 来确保您具有正确的格式。

如果这里没有markdown 包,还需要安装它。

在您的 INSTALLED_APPS 的 settings.py 中,您应该包含“django.contrib.markup”

有关详细信息,请参阅此页面

至于为什么看不到格式,请检查标记的源并确保其正常工作。即确保它正确标记。然后确保您拥有所需的样式表。

Markdown 格式是标记之前的格式。

您还可以使用JQuery为标记的元素添加一个类,这样您就可以在不影响页面其余部分的情况下设置 markdown 文本的样式。

于 2009-08-04T01:43:56.610 回答