3

Perlモジュールを利用しようとしていますがHTML::Template、ドキュメントによるとHTML、マークアップの周りに大なり/小なりの代わりにコメントを使用できると書かれていますが、うまくいきません。

HTML::Template の perldoc から

有効な HTML が大好きで、テンプレートを有効な HTML 構文に準拠させたい場合は、必要に応じて HTML コメントの形式でテンプレート タグを入力できます。これは、HTML::Template 処理の前にテンプレートの HTML 構文を検証したい HTML 作成者や、DTD に精通した編集ツールを使用する HTML 作成者にとって役立つかもしれません。

   <!-- TMPL_VAR NAME=PARAM1 -->

これを試すと、Apache ログに次のメッセージが表示されます。

[Tue Jul 03 19:24:23 2012] [error] [client ::1] HTML::Template: 存在しないパラメータ 'fname' を設定しようとしています - このパラメータ名はテンプレート ファイル内の宣言と一致しません: (die_on_bad_params => 1) /var/www/cgi-bin/form.cgi 行 90、リファラー: .... getcontactinfo.html

メソッドにオプションdie_on_bad_params => 0を設定するHTML::Template->newと、テンプレート名のコメント形式が機能するように見えますが、これがこれを達成する正しい方法であることを誰でも確認できますか?

編集#1

実際のコードの一部を次に示します。

.html テンプレート ファイルから

<tbody>
<tr>             <td>First Name:         </td>  <td><!-- TMPL_VAR NAME=FNAME -->           </td> </tr>
<tr>             <td>Name:               </td>  <td><!-- TMPL_VAR NAME=NAME -->           </td> </tr>
<tr class="alt"> <td>Email:              </td>  <td><!-- TMPL_VAR NAME=EMAIL -->          </td> </tr>
<tr>             <td>Affiliation:        </td>  <td><!-- TMPL_VAR NAME=AFFILIATION -->    </td> </tr>

私の .cgi スクリプトから

my $template = HTML::Template->new(filename => '/var/www/html/acknowledge.html', die_on_bad_params => 0);
$template->param(FNAME          => $firstName);
$template->param(NAME           => $firstName . " " . $lastName);
$template->param(EMAIL          => $email);
$template->param(AFFILIATION    => $affiliation);
4

2 に答える 2

2

これまでに見つけた唯一の2つの方法は次のとおりです。

1 - HTML::Template には vanguard_compatibility_mode と呼ばれるスイッチがあります... perldocs から

vanguard_compatibility_mode - 1 に設定すると、モジュールは標準構文に加えて %NAME% のような s を期待します。また、die_on_bad_params => 0 を設定します。Vanguard Media 以外で古い形式のテンプレートを使用しようとしている場合は、これについて心配する必要はありません。デフォルトは 0 です。

2 - HTML::Template は、次のように、コードが HTML に準拠するように、コメント ブロックにテンプレート タグを埋め込むこともサポートしています。<!-- TMPL_NAME NAME=FNAME -->

再び perldocs から:

有効な HTML が大好きで、テンプレートを有効な HTML 構文に準拠させたい場合は、必要に応じて HTML コメントの形式でテンプレート タグを入力できます。これは、HTML::Template 処理の前にテンプレートの HTML 構文を検証したい HTML 作成者や、DTD に精通した編集ツールを使用する HTML 作成者にとって役立つかもしれません。

<!-- TMPL_VAR NAME=PARAM1 -->

die_on_bad_params => 0この 2 番目のオプションは、コンストラクターに設定するまで、最初は機能しませんでした。

于 2012-07-04T00:36:06.883 に答える
0

コードのどこにも「fname」という名前のパラメーターが表示されないため、エラー メッセージがわかりません。投稿したコードは完全なコードではないのでしょうか?

die_on_bad_params について: はい、これを 0 に設定することがこれを解決する方法です。個人的には常に 0 に設定していますが、とにかくこのオプションが必要な理由がわかりません。私の HTML::Template::Compiled (HTML::Template に類似した代替) モジュールでは、実装したことがありません。

于 2012-07-05T10:28:33.767 に答える