2015-08-05 2 views
0

Я хочу сделать Джанго пользовательского шаблона фильтра, чтобы сделать специальные блоки кода, которые выглядят следующим образом ...Django 1.8: Как я могу создать специальные блоки кода для выделения синтаксиса в шаблонах 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 %} 

рубин код

{% 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, которые отличаются друг от друга. Кто-нибудь здесь создал нечто подобное?

+0

Могут ли пользовательские теги работать на вас? –

+0

Что вы подразумеваете под пользовательскими тегами? это приложение? – JellisHeRo

+0

Почему это помечено «уценкой»? Я не вижу, что Markdown имеет к этому отношение. Или есть связь с Markdown, которую вы не объяснили? Если это так, предоставление этой информации (путем [редактирования] (http://stackoverflow.com/posts/31839124/edit) вашего вопроса и добавления его) может привести к лучшим ответам. – Waylan

ответ

1

Вы можете написать собственный шаблонный тег, который parses until an end tag и что-то сделать с содержимым.

2

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, чтобы выделить код, так что любой language поддерживается Pygments автоматически поддерживает редактор

Конечно, для этого вам необходимо активировать расширения. Без какой-либо информации о том, как вы используете Markdown из Django, я могу предоставить только несколько указателей.

Если вы звоните в библиотеку Markdown непосредственно из кода Python, а затем просто включить расширения в вызове 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 были аккуратно packaged up от richeland). Вам нужно будет добавить этот CSS в CSS, используемый вашим сайтом (особенности которого зависят от того, как настроен ваш сайт Django и, следовательно, исключен из этого ответа).

Смежные вопросы