8

文字列がそのままになるように、ビルドアウト構成で変数置換に使用される魔法の文字をエスケープする簡単な方法はありますか? 言い換えれば、私が言うところ:

[part]
attribute = ${variable}

実際には ${variable} を展開したくありませんが、リテラル値のままにしておきます。

実際に私が遭遇している特定の問題は、ビルドアウト構成ファイル自体ではなく、レシピ「collective.recipe.template」によって処理されるテンプレート ファイルにあります。これは、構成ファイルで使用されるビルドアウトと同じ変数置換エンジンを使用します。問題は、テンプレートとして使用したいファイルが、最終的にファイルを消費するアプリケーション構成システムと組み合わせて、独自の目的で「${variable}」構文を既に使用していることです。

この問題を回避するために私が見つけた唯一の方法は、次のようなものを使用することです。

[server-xml]
recipe = collective.recipe.template
input = templates/server.xml.in
output = ${product:build-directory}/conf/server.xml
dollar = $

テンプレート入力ファイルには、次のものがあります。

${dollar}{variable}

それ以外の:

${variable}

すでに持っていたこと。

これが行っていることは、テンプレートを使用してセクションに対して「dollar」属性を検索し、「$」に置き換えることです。

それをしなければならないのではなく、できることを望んでいました:

\${variable}

またはおそらく:

$${variable}

そして、私が望むことをさせるためにダミーの属性を持つ必要がなくなります。

buildout のソース コードを見ると、変数置換に一致する方法では、エスケープ メカニズムが提供されていないようです。

実際に方法がない場合は、おそらく誰かが、変数展開を実行できるビルドアウトの代替テンプレート レシピを知っていますが、それが変数を示す方法に関係なくエスケープ メカニズムを提供します。テンプレート システムの展開メカニズムと、テンプレート化されるファイル内のリテラル データ。

4

3 に答える 3

6

残念ながら、ビルドアウト変数置換コード (collective.recipe.template が依存している) の分析は正しいです。変数置換をエスケープするための構文はありません。置換${section:variable}を提供するソリューションは${dollar}、私が考えることができる最善の回避策です。

もちろん、zc.buildout チームにパッチを提案して、変数置換構文のエスケープのサポートを追加することもできます。:-)

于 2009-07-22T11:17:12.060 に答える
5

Collective.recipe.template のバージョン 1.7 以降ではげんしテキスト テンプレートを使用できますが、バージョン 1.8 以降ではいくつかの修正が行われたため便利です。

recipe = collective.recipe.template[genshi]:genshi
...
mymessage = Hello

入力ファイルは次のようになります

The message in $${:mymessage} is: ${options['mymessage']}

genshi はドルのエスケープを許可します。http://genshi.edgewall.org/wiki/Documentation/templates.html#escaping を参照してください。

http://pypi.python.org/pypi/collective.recipe.template#genshi-text-templatesで genshi でレシピを使用する方法の詳細

于 2011-05-09T15:46:45.827 に答える
3

と の間に空の置換を挿入する$と、{buildout が結果のテキストを buildout 置換として評価するのを防ぐ必要があります。

buildout.cfg:

[server-xml]
recipe = collective.recipe.template
input = server.xml.in
output = server.xml
_ =

server.xml.in:

do no substitution $${_}{myvar} blah

サーバー.xml:

do no substitution ${myvar} blah
于 2016-05-07T06:43:34.223 に答える