Подсветка синтаксиса с помощью Markdown & Pygments в Django - PullRequest
5 голосов
/ 04 августа 2009

Я пытался заставить подсветку синтаксиса работать в моем простом тестовом приложении Django (1.1) с использованием Markdown (2.0.1) и Pygments (1.0). Идея состоит в том, чтобы сгенерировать 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')

Я бы ожидал увидеть хотя бы набор элементов кода в исходном коде.

Ответы [ 2 ]

3 голосов
/ 04 августа 2009

Исправлено! Код должен был содержать четыре пробела, а не три!

Я сделал несколько правок, чтобы проверить это, прежде чем задавать вопрос, но казалось, что Firefox кэшировал страницу как тестовую публикацию. Так как я использовал комбинацию клавиш Windows, чтобы перезагрузить страницу, а не клавиатуру Mac, черт!

Я заметил, что это работает, когда я сделал новый тестовый пост из-за разочарования с отступом в четыре пробела, а затем проверил источник страницы.

1 голос
/ 04 августа 2009

Лучше сохранить его в базе данных в формате уценки, а затем преобразовать его в формат презентации, который вы хотите (HTML) во время отображения. Таким образом, вы можете редактировать свои данные так же, как вы добавили их в первую очередь.

В верхней части шаблона вы должны указать:

{% load markup %}

Затем используйте шаблон фильтра уценки.

{{ blog_post.body|markdown}}

Тогда просто используйте css, чтобы убедиться, что вы правильно отформатировали.

Вам также необходимо установить пакет уценки , если у вас его здесь нет.

И в вашем settings.py в вашем INSTALLED_APPS вы должны включить 'django.contrib.markup'

Для получения дополнительной информации см. Эту страницу .

Что касается того, почему вы не видите форматирование, проверьте размеченный источник и убедитесь, что он работает правильно. Т.е. убедитесь, что он размечается правильно. Затем убедитесь, что у вас есть необходимые таблицы стилей.

Формат уценки - это формат перед разметкой.

Вы также можете использовать JQuery , чтобы добавить класс к размеченным элементам, чтобы вы могли оформлять текст уценки, не затрагивая остальную часть страницы.

...