Как стать автором
Обновить

Фильтр для типографики

Время на прочтение2 мин
Количество просмотров1.3K
Недавно Игорь Кононученко выложил версию типографа, написанного на Питоне. Игорю большое человеческое спасибо. А я скромно решил сделать из библиотеки типографический фильтр для 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 — если где ошибся — поправьте меня. И еще раз спасибо Игорю за типограф.
Теги:
Хабы:
+26
Комментарии19

Публикации

Истории

Работа

Python разработчик
142 вакансии

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн