Django 1.8:如何在Django模板中制作特殊的语法高亮代码块?



我想做一个django自定义模板过滤器,使特殊的代码块看起来像下面的…

Python代码

{% highlight python %}
    import random
    # Generate a random integer in the range 10 to 49.
    i = random.randrange(10,50)
    print 'Your number is', i
{% endhighlight %}
Ruby代码

{% highlight ruby %}
    for i in (1..4)
        print i," "
    end
{% endhighlight %}
<<p> R代码/strong>
{% highlight r %}
    require(rpart)
    load("C:/Users/Jaysp_000/Downloads/credit.rdata")
    # Classification Tree
    summary(ct <- rpart(Credit ~ CreditAmount + Age + CreditHistory + Employment, data=credit))
{% endhighlight %}

有谁知道我怎么才能创建一个这样的吗?我想根据正确的编程语言制作高亮显示的代码块。例如,Ruby代码会相应地高亮显示,这与R和Python不同,它们彼此不同。这里有人创造了类似的东西吗?

Python-Markdown附带了CodeHilite扩展,用于突出显示代码块。不需要使用"模板"(事实上Markdown文件通常不会通过模板传递,尽管如果你想为它编写自定义代码是可能的——参见这里的解释)。

只需启用扩展并在第一行定义代码块的语言(如文档中所述):

    :::python
    import random
    # Generate a random integer in the range 10 to 49.
    i = random.randrange(10,50)
    print 'Your number is', i

如果您还启用了Fenced代码块,您还可以在其上定义语言(这消除了对代码块缩进的需要):

```ruby
for i in (1..4)
    print i," "
end
```

在底层,CodeHilite使用pyements来突出显示代码,因此pyements支持的任何语言都会自动得到支持。

当然,要使其工作,您需要启用扩展。没有任何关于你如何在Django中使用Markdown的信息,我只能提供一些指针。

如果您直接从Python代码调用Markdown库,那么只需在对markdown.markdown的调用中包含扩展:

body = markdown.markdown(source, extensions=['markdown.extensions.codehilite', 'markdown.extensions.fenced_code'])

否则,您可能会发现django_markdown库很有帮助。它有一个MARKDOWN_EXTENSIONS的设置,你需要在Django设置文件中设置:

MARKDOWN_EXTENSIONS = ['markdown.extensions.codehilite', 'markdown.extensions.fenced_code']

最后,您需要CSS来告诉浏览器如何设置高亮显示的代码的样式。pyements项目提供了一些默认的CSS样式,您可能会发现这是一个有用的起点(这些CSS样式已经被richeland整齐地打包了)。你需要将这些CSS添加到你的站点所使用的CSS中(具体的CSS取决于你的Django站点是如何配置的,因此不在这个答案中)。

您可以编写一个自定义模板标记,该标记解析到结束标记并对内容进行处理。

最新更新