【问题标题】:Django 1.8: How can I make special code blocks for syntax highlighting in django templates?Django 1.8:如何为 django 模板中的语法高亮制作特殊代码块?
【发布时间】:2015-10-28 14:52:20
【问题描述】:

我想制作一个 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 %}

R 代码

{% 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 不同,它们彼此不同。这里有没有人创造过类似的东西?

【问题讨论】:

  • 自定义标签对你有用吗?
  • 自定义标签是什么意思?这是一个应用程序吗?
  • 为什么这个标签是“markdown”?我不明白 Markdown 与此有什么关系。或者是否与您没有解释的 Markdown 有联系?如果是这样,提供该信息(通过editing 您的问题并添加它)可能会产生更好的答案。
  • @Waylan 啊,是的。我将它用于降价文件作为博客文章
  • 您是否在 Markdown 文档中插入模板标签?如果是这样,那将完全改变答案。

标签: django python-3.x markdown django-template-filters


【解决方案1】:

Python-Markdown 附带 CodeHilite Extension 用于突出显示代码块。无需使用“模板”(事实上,Markdown 文件通常不会通过模板传递,尽管如果您想为其编写自定义代码也可以——请参阅说明here)。

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

    :::python
    import random

    # Generate a random integer in the range 10 to 49.

    i = random.randrange(10,50)
    print 'Your number is', i

如果您还启用了Fenced Code Blocks,您还可以在它们上定义语言(这样就无需缩进代码块):

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

在后台,CodeHilite 使用 Pygments 突出显示代码,因此 Pygments 支持的任何 language 都会自动得到支持。

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

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

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

否则,您可能会发现 django_markdown 库会有所帮助。它有一个 setting 代表 MARKDOWN_EXTENSIONS,您需要在 Django 设置文件中进行设置:

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

最后,您将需要 CSS 来告诉浏览器如何设置高亮代码的样式。 Pygments 项目提供了一些默认的CSS styles,您可能会发现它是一个有用的起点(那些CSS 样式已经被richeland 巧妙地使用了packaged up)。您需要将该 CSS 添加到您的站点使用的 CSS 中(具体取决于您的 Django 站点的配置方式,因此不包含在此答案中)。

【讨论】:

    【解决方案2】:

    您可以编写一个自定义模板标签 parses until an end tag 并对内容进行处理。

    【讨论】:

      猜你喜欢
      • 2012-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 1970-01-01
      • 2014-10-27
      • 2015-11-11
      • 2012-01-06
      相关资源
      最近更新 更多