Использование «класса» в качестве опции для макроса Макро - PullRequest
2 голосов
/ 16 октября 2011

Я пишу расширение Mako, которое помогает в рендеринге форм.Я делал отличные успехи, пока не столкнулся с одним большим камнем преткновения в отношении классов CSS.Я хочу написать код, который выглядит следующим образом:

<%fp:form method="post" action="" class="css-class"%>
...content
</%fp:form>

Функция, на которую ссылается fp: form, выглядит просто так:

@supports_caller
def form(context, **kwargs):
     #...

Когда я запускаю этот код, я получаю следующееисключение:

SyntaxException: (SyntaxError) invalid syntax (<unknown>, line 1) (u"fp.form(method=u'post',action=u'',class=u'css-class')") at line: 1 char: 52

Это происходит только в том случае, если указан атрибут "class", предположительно потому, что Mako преобразовывает атрибуты непосредственно в аргументы ключевого слова, а не в распаковке словаря.Я пытался передать специальный аргумент "attrs" в свою функцию, но, похоже, нет хорошего способа передать дикт Мако:

<%fp:form method="post" action="" attrs="${{'class':'css-class'}}"%>
#SyntaxError: invalid syntax
<%fp:form method="post" action="" attrs="${dict(class='css-class')}"%>
#Won't work - can't pass 'class' directly as a keyword argument!

Так как мне обойти это?Я знаю, что могу указать специальный атрибут, такой как "css_class", и преобразовать его в класс, но это немного хакерское действие, и, кроме того, библиотека не может создавать формы с атрибутом css_class.

1 Ответ

2 голосов
/ 16 октября 2011

Обойти это невозможно, потому что class является ключевым словом и всегда анализируется как таковое. Люди обычно используют class_ вместо.

...