Недавно Игорь Кононученко выложил версию типографа, написанного на Питоне. Игорю большое человеческое спасибо. А я скромно решил сделать из библиотеки типографический фильтр для django. Не то, чтобы это сложно — но новичкам, вроде меня, может пригодиться. Что, собственно, получилось.
1. Для начала скачал через SVN библиотеку с Гугл-код: http://code.google.com/p/typo-py/.
2. В качестве руководства в написании фильтров обратился к официальной документации.
3. Делал тесты на ранее написанной модели Portfolio — отсюда и такие пути получились. Файл typographus.py положил в mysite/portfolio/templatetags (не забываем положить туда пустой файл __init__.py). В конец файла дописал сам код фильтра:
4. В файл settings.py в список INSTALLED_APPS добавил строчку, mysite.portfolio.templatetags.typographus, которая подключает обработчик.
5. В html-шаблоне получился такой вот код:
Вот, собственно, и все. В процессе написания умудрился натолкнуться на маленькую проблемку: сам типограф требует строки в utf8, и если используется цепочка фильтров (для переносов абзацев: {{ portfolio.text|linebreaks|typographus }}), то выдается ошибка. Поэтому в самом фильтре есть проверка на тип строки и конфертация в utf8, если это необходимо.
Поучилось немного скомкано — я совсем недавно использую Django — если где ошибся — поправьте меня. И еще раз спасибо Игорю за типограф.
1. Для начала скачал через SVN библиотеку с Гугл-код: http://code.google.com/p/typo-py/.
2. В качестве руководства в написании фильтров обратился к официальной документации.
3. Делал тесты на ранее написанной модели Portfolio — отсюда и такие пути получились. Файл typographus.py положил в mysite/portfolio/templatetags (не забываем положить туда пустой файл __init__.py). В конец файла дописал сам код фильтра:
from django import template
register=template.Library()
@register.filter
@stringfilter
def typographus(string):
"""Russian typorgify"""
if type(string) is not unicode:
string = unicode(string)
return Typographus().process(string)
4. В файл settings.py в список INSTALLED_APPS добавил строчку, mysite.portfolio.templatetags.typographus, которая подключает обработчик.
5. В html-шаблоне получился такой вот код:
{% extends "base.html" %}
{% load typographus %}
...
{% block content %}
{% autoescape off %}
<h1>{{ portfolio.title|typographus }}</h1>
{{ portfolio.text|linebreaks|typographus }}
{% endautoescape %}
{% endblock %}
Вот, собственно, и все. В процессе написания умудрился натолкнуться на маленькую проблемку: сам типограф требует строки в utf8, и если используется цепочка фильтров (для переносов абзацев: {{ portfolio.text|linebreaks|typographus }}), то выдается ошибка. Поэтому в самом фильтре есть проверка на тип строки и конфертация в utf8, если это необходимо.
Поучилось немного скомкано — я совсем недавно использую Django — если где ошибся — поправьте меня. И еще раз спасибо Игорю за типограф.