Django Markdown y Google Prettify

TODO: Cambiar esto por highlightjs y simplemente Django markdown

Fuentes


Una manera rápida para añadir entradas con markdown y/o resaltar bloques de código.

Mientras que django-pagedown lo uso para mostrar el <textarea> con algunos botones de ayuda para formatear el código markdown, django-markdown-deux lo utilizo la presentación (formateado).

Y por ultimo, utilizo google-code-prettify para el resaltado de sintaxis.

Instalación:

pip install django-pagedown
pip install django-markdown-deux

Añadir en settings.py

INSTALLED_APPS = (
    # [...]
    'markdown_deux',
    'pagedown',
)

django-pagedown

Todos los TextField de un modelo.

Añadir en admin.py:

from django.contrib import admin
from django.db import models

from pagedown.widgets import AdminPagedownWidget

from .models import Article


class ArticleAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.TextField: {'widget': AdminPagedownWidget},
    }

admin.site.register(Article, ArticleAdmin)

Ver todas las opciones django-pagedown

django-markdown-deux

Para la presentación y formateo de marcado.

Añado en el template que mostrara el código markdown

{% extends 'base.html' %}
{% load markdown_deux_tags %}

{% block content %}
  <h2>{{ article.title }}</h2><hr>
  <div>
    {{ article.body|markdown }}
  </div>
{% endblock content %}

Ver todas las opciones django-markdown-deux

google-code-prettify

Descargar y descomprimir prettify-small-4-Mar-2013.tar.bz2 o la versión mas reciente.

Renombro google-code-prettify a prettify y la pego en project_dajngo/static/js/.

Entro dentro de project_dajngo/static/js/prettify/, corto prettify.css y pego en project_dajngo/static/css/.

Añado en la parte del css.

<link href="{% static "css/prettify.css" %}" rel="stylesheet">

y en la parte del javascript.

<script src="{% static "js/prettify/prettify.js" %}"></script>
<script type='text/javascript'>
      $('pre').addClass('prettyprint');
      prettyPrint();
</script>

Algunos themes para prettify

Scroll si el código es muy largo, en el archivo .css

pre code {
    overflow: auto;
    display: block;
    line-height: 1.6em;
    white-space: pre;
    word-wrap: normal;
    /* Si se quiere poner un height maximo */
    /*max-height: 600px;*/
}

Números en las lineas, modificar $('pre').addClass('prettyprint'); por $('pre').addClass('prettyprint linenums');

Otra opción para el resaltado de sintaxis highlight.js