Мако Фильтр в Хамелеоне?

Есть ли возможность использовать шаблонные фильтры в Chameleon, как я привык в Mako? В Мако можно было сделать что-то вроде

${s | filter}

где filter — это функция, отображающая строки в строки, а Mako применяет filter к s и выводит их (после экранирования объектов HTML). Таким образом, можно было бы легко делать такие вещи, как

${s | nl2br}

Я знаю, что способ Chameleon сделать это Разрыв строки в Chameleon. Но у меня есть другие приложения для этих фильтров, поэтому мне интересно, поддерживается ли что-то подобное в Chameleon.


person born    schedule 24.02.2013    source источник


Ответы (3)


Нет, нет. Вместо этого выполняйте обработку в своем представлении или используйте код Python в выражениях TALES.

person Martijn Pieters    schedule 24.02.2013

В Chameleon оператор канала ("|") означает попытку-исключение, а не "применить фильтр".

Но поскольку языком выражений является просто Python, в этом нет необходимости с таким синтаксическим сахаром.

Кроме того, в Chameleon есть тип выражения import:, который может помочь вам импортировать вспомогательные функции:

<div tal:define="h import: helpers">
  ...
  ${structure: h.nl2br(s)}

Обратите внимание, что если nl2br возвращает объект, который реализует метод __html__(), Chameleon вызовет этот метод для получения вывода, и вам не понадобится structure:, чтобы избежать экранирования HTML.

Тем не менее, это правда, что оператор фильтра Mako иногда делает код шаблона более читаемым.

person malthe    schedule 04.03.2013

Путь Хамелеона

${nl2br(s)}

я делаю вот так

views.py

form helpers import nl2br
def my_view(request):
    return {
        'nl2br':nl2br,
    }

template.pt

${structure: nl2br(s)}
person bismigalis    schedule 24.02.2013
comment
Я не слишком уверен, но это работает, только если я отключу кодировку htmlentities Chameleon, верно? Это не очень хорошая идея - по крайней мере, в моей ситуации :-/ - person born; 24.02.2013
comment
добавить структуру: если вывод должен интерпретироваться как html - person bismigalis; 24.02.2013
comment
просто как предупреждение для более поздних читателей: добавление структуры к выводу может означать серьезную ошибку безопасности. - person born; 24.02.2013