python - Makoマクロのオプションとして「クラス」を使用する

原文 python mako

フォームのレンダリングを支援するMako拡張機能を書いています。 CSSクラスに関して1つの大きな障害にぶつかるまで、私は素晴らしい進歩を遂げていました。次のようなコードを記述したいと思います。

<%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


これは、おそらくMakoが属性をディクショナリのアンパックではなく直接キーワード引数に変換しているため、「クラス」属性が指定されている場合にのみ発生します。私は関数に特別な "attrs"引数を渡そうとしましたが、Makoにdictを渡す良い方法はないようです:

<%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の属性を持つフォームを生成しないようにします。
答え
classはキーワードであり、常にそのように解析されるため、これを回避する方法はありません。通常、代わりにclass_を使用します。
関連記事

python - 「pip install」と「setup.py install」での最大再帰[終了]

python - ウェルカムテキストを表示するにはどうすればよいですか?

python - 新しいインタープリターセッションを開始せずに、編集のためにIDLEで.pyファイルを開くにはどうすればよいですか?

python - Django / Pythonを使用して既存のWebサービスを利用する

python - python.socketのどの部分が、タイムアウトが設定されていても、スクリプトをいつまでもフリーズさせる可能性がありますか?

python - 隣接行列を使用したPythonでのグラフの色分け

python - 複数のテナントにわたるアカウント管理

python - ModelFormとModelMultipleChoiceFieldを使用してManyToManyFieldsに保存する

python - Pythonでgeventまたはスレッドを使用したredisを使用して、いくつかのタスクのためにアプリケーションを構造化する方法

python - Python-ELFファイルからビルドIDを取得する