Фильтр шаблонов гепардов

Извините, если вопрос звучит наивно. У меня есть шаблон гепарда, например:

#filter None
<html>
<body>
$none should be ''
$number should be '1'
</body>
</html>
#end filter

с namespace = {'none': None, 'number': 1}
Поэтому я хочу преобразовать все None и не строковые значения в '' и строку соответственно. Согласно документу Cheetah: http://www.cheetahtemplate.org/docs/users_guide_html_multipage/output.filter.html, мне нужен фильтр по умолчанию. Разве это не то, что я сделал, положив #filter None в начале? Почему это не работает?

Пожалуйста, помогите мне сделать это правильно. Спасибо

РЕДАКТИРОВАТЬ:
Чтобы было понятнее, в основном я хочу, чтобы это прошло if тестовое задание:

#filter None
<html>
<body>
#if $none == '' and $number == '1':
<b>yay</b>
#end if
</body>
</html>
#end filter

Так что, если это сработает, все, что я должен увидеть, это ура

1 ответ

Решение

Чтобы объяснить результаты, которые вы получаете, давайте определим это:

def filter_to_string(value):
    if value is None:
        return ''
    return str(value)

Давайте представим, что это наш фильтр. Теперь давайте будем наивными о том, как Гепард выполняет обработку (это немного сложнее, чем это). Результат, который вы получите, будет получен из этого:

>>> "<html>\n<body>\n" + \
    filter_to_string(ns['none']) + " should be ''\n" + \
    filter_to_string(ns['number']) + " should be '1'\n</body>\n</html>\n"
"<html>\n<body>\n should be ''\n1 should be '1'\n</body>\n</html>\n"

где ns будет пространство имен.

Учитывая это, ваш результат все еще удивляет вас?

Другие вопросы по тегам