2013-02-24 10 views
1

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

${s | filter} 

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

${s | nl2br} 

Я знаю, что Хамелеон способ сделать это является Line Breaking in Chameleon. Но у меня больше приложений для этих фильтров, поэтому мне интересно, поддерживается ли что-то подобное в Chameleon.

ответ

1

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

0

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

${nl2br(s)} 

Я делаю это, как этот

views.py

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

template.pt

${structure: nl2br(s)} 
+0

Я не уверен, но это работает только в том случае, если я отключу кодировку hammlentities Chameleon, не так ли? Это не очень хорошая идея - по крайней мере, в моей ситуации: -/ – born

+0

добавить структуру: если вывод должен интерпретироваться как html – bismigalis

+0

, как предупреждение для более поздних читателей: добавление структуры к выходу может означать серьезную ошибку безопасности. – born

1

В Хамелеоне оператор трубы («| «) Оператор означает примерочный, за исключением, вместо„применить фильтр“.

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

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

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

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

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