我想做一个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站点是如何配置的,因此不在这个答案中)。
您可以编写一个自定义模板标记,该标记解析到结束标记并对内容进行处理。