Комментарии 19
Пользуюсь типографом Артемия Андреевича, заценим и вашь
-3
НЛО прилетело и опубликовало эту надпись здесь
Определённо + в карму
0
PS. Чёт я совсем не догоняю на счёт UTF8. Давно уже с такой проблемой не сталкивался
0
НЛО прилетело и опубликовало эту надпись здесь
Типограф требует, чтобы тип строки в параметрах был utf. По всей видимости, при выполнении переноса строк в {{ portfolio.text|linebreaks|typographus }} фильтр linebreaks отдает что-то отличное от юникода (что странно). Тогда typographus ругается. База у меня mysql в кодировке utf8_unicode_ci.
0
Посмотрите эту бесплатную библиотеку веб-типографа pridedesign.ru/works/tg/.
0
if type(string) is not unicode — устаревший способ, правильно: if not isinstance(string, unicode)
Впрочем, эта проверка вообще не нужна: декоратор stringfilter() вызовет force_unicode().
autoescape лучше не выключать, а использовать фильтр safe.
Впрочем, эта проверка вообще не нужна: декоратор stringfilter() вызовет force_unicode().
autoescape лучше не выключать, а использовать фильтр safe.
+1
Исправляем ошибки/Пишем правильный фильтр.
1) Патчим typographus.py, иначе он не примет результат работы force_unicode.
В 128 строке заменяем:
if type(string) is not unicode:
на:
if not isinstance(string, unicode):
2) Грамотно пишем фильтр, помня о безопасности (простите, карма не позволяет <pre></pre> использовать):
typographus.py:
from django import template
from django.template.defaultfilters import stringfilter
from django.utils.html import conditional_escape
from django.utils.safestring import mark_safe
from engine.common.typographus import typo
register = template.Library()
@register.filter('typo')
@stringfilter
def do_typo(value, autoescape=False):
____if autoescape:
________value = conditional_escape(value)
____return mark_safe(typo(value))
do_typo.needs_autoescape = True
3) Используем в шаблонах:
{% load typographus %}
{{ variable|typo }}
1) Патчим typographus.py, иначе он не примет результат работы force_unicode.
В 128 строке заменяем:
if type(string) is not unicode:
на:
if not isinstance(string, unicode):
2) Грамотно пишем фильтр, помня о безопасности (простите, карма не позволяет <pre></pre> использовать):
typographus.py:
from django import template
from django.template.defaultfilters import stringfilter
from django.utils.html import conditional_escape
from django.utils.safestring import mark_safe
from engine.common.typographus import typo
register = template.Library()
@register.filter('typo')
@stringfilter
def do_typo(value, autoescape=False):
____if autoescape:
________value = conditional_escape(value)
____return mark_safe(typo(value))
do_typo.needs_autoescape = True
3) Используем в шаблонах:
{% load typographus %}
{{ variable|typo }}
+2
Спасибо, что делитесь опытом (karma+). Отправлю автору типографа ваши комментарии, да и сам подправлю код в этом посте с указанием вашего авторства.
Подскажите, а почему правильно регистрировать фильтр 'typo', а функция называется 'do_typo'? Просто в примерах доки именование функции схоже с названием фильтра.
Подскажите, а почему правильно регистрировать фильтр 'typo', а функция называется 'do_typo'? Просто в примерах доки именование функции схоже с названием фильтра.
0
Регистрировать можно под любым именем.
Но строчкой
from engine.common.typographus import typo (у вас она должна быть from typographus import typo)
я импортирую в модуль функцию typo, чтобы не было конфликта имен надо функцию-фильтр назвать как-то по-другому. В джанге принято в таких случаях приписывать do_* что я и сделал
Но строчкой
from engine.common.typographus import typo (у вас она должна быть from typographus import typo)
я импортирую в модуль функцию typo, чтобы не было конфликта имен надо функцию-фильтр назвать как-то по-другому. В джанге принято в таких случаях приписывать do_* что я и сделал
0
Т. е. лучше всего оригинальный typographus.py положить туда где его сможет найти питон (в PYTHONPATH...).
В директории templatetags создать новый файл typograhus.py (лучше бы конечно по-другому назвать, что-нибудь типо typo_filters.py).
В него поместить код фильтра, а нужную функцию typo — импортировать.
Все, пошел спать, а-то мысли сонно спотыкаются на ходу.
В директории templatetags создать новый файл typograhus.py (лучше бы конечно по-другому назвать, что-нибудь типо typo_filters.py).
В него поместить код фильтра, а нужную функцию typo — импортировать.
Все, пошел спать, а-то мысли сонно спотыкаются на ходу.
0
а чем оно лучше code.google.com/p/typogrify/?
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Фильтр для типографики