【问题标题】:Syntax highlighting with Markdown & Pygments in Django在 Django 中使用 Markdown 和 Pygments 突出显示语法
【发布时间】:2010-11-16 13:24:36
【问题描述】:

我一直在尝试使用 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')

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

【问题讨论】:

    标签: django markdown pygments


    【解决方案1】:

    修好了!代码应该缩进四个空格而不是三个!

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

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

    【讨论】:

    • 跨多个平台的应用程序键盘快捷键太痛苦了。
    • 当我必须在 Windows 上工作时,我会交换 Ctrl 和 Alt。它不能解决所有问题(如果只有 Windows 应用程序的作者会决定他们的首选项菜单的位置!)但它肯定会有所帮助。
    【解决方案2】:

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

    您应该在模板的顶部包含:

    {% load markup %}
    

    然后使用模板过滤markdown。

    {{ blog_post.body|markdown}}
    

    然后只需使用 css 来确保格式正确。

    如果这里没有,也需要install the markdown package

    在你的 INSTALLED_APPS 的 settings.py 中,你应该包含 'django.contrib.markup'

    For more information see this page.

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

    Markdown 格式是标记前的格式。

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

    【讨论】:

    • 我正在存储用户输入的原件(因此他们可以继续使用 Markdown 对其进行编辑),并且我还保存了处理后的输出,因此我不必每次都转换它用过。
    • 对于转换它需要的光处理,我觉得还是节省空间比较好。我也讨厌在两个地方有同样的东西,但也许这只是成为程序员的一部分。但这取决于你:)
    • “我也讨厌在两个地方有同样的东西,但也许这只是作为程序员的一部分。”嘿,我讨厌做两次相同的工作,如果我不需要的话,这也是程序员的一部分;)
    • 你的处理器可以做两次,或者你的数据库可以是硬盘驱动器+处理器:)
    • 每次保存/编辑处理一次并提供预处理的输出似乎比每次从数据库中获取它时都处理它更可取。
    猜你喜欢
    • 2012-11-08
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 2019-03-06
    相关资源
    最近更新 更多