4

すべてのテンプレート ファイルにモジュールをインポートしないように、 mako.imports設定を使用しようとしています。

もともと、次のようなすべてのテンプレートの上部にモジュールレベルのブロックがありました。

<%!
    import logging
%>

そして、それを .ini ファイルの設定に置き換えたいと思います。

mako.imports = 'import logging'

NameError: name 'logging' is not definedテンプレートを使用しようとすると、テンプレートがスローされるだけなので、これは機能しません。

次のような設定のため、mako.imports は呼び出されないようです。

mako.imports = 'import SpamAndEggs'

エラーをスローしません。

私は Pyramid 1.3 と Mako 0.7.0 を使用しています。

4

2 に答える 2

2

pylons-discussから、構文は次のとおりです。

mako.imports = 
    import logging 
    import some.other.module 

改行で区切られた import ステートメント。Pythonの人々にとっての「文字列リスト」はかなり異なるため、ドキュメントには例を挙げてこれを記載する必要があると思います。

マイク・メリケルに感謝します。

于 2012-10-08T11:45:35.253 に答える
1

OK、Pyramid で生成された Mako テンプレート コードを見ると、文字通り、その構成設定、引用符、括弧、およびすべての内容が出力されます。

したがって、構文は次のようにする必要があります。

mako.imports = import logging

次のように複数のインポートを使用します。

mako.imports = import logging, some.other.module

これらのいずれでもない

mako.imports = 'import logging'
mako.imports = ['import logging', 'some.other.module']
mako.imports = import logging, import some.other.module

最後mako.exceptions.SyntaxExceptionの 2 つは有効な Python ではないため a をスローしますが、最初の 2 つはリテラルをコード行として出力するだけなので、何もせずに黙って失敗します。

「Pythonステートメントの文字列リスト、通常は個々の「インポート」行」を読むドキュメントからこれを推測しませんでした(しかし、おそらく私はそれを正しく理解していませんでした)。

Mako に関する投稿をしてくれた Mike Bayer に感謝します。

于 2012-10-08T01:06:27.410 に答える