Go テンプレートでのリクエスト コンテキストの使用
Go テンプレートでは、トリガーとなるリクエストからの情報にアクセスする必要がある状況が発生する場合があります。現在のユーザーが管理者であるかどうかを判断するなど。ただし、テンプレートにはリクエスト コンテキストの固有の認識が欠けています。
解決策: パイプライン
一般的なアプローチの 1 つは、パイプラインを使用して必要なデータをハンドラーからテンプレートに渡すことです。 。これには、関連するコンテキスト情報を含むパイプライン変数を作成し、テンプレート内でその変数にアクセスすることが含まれます。例:
<code class="go">type TemplateData struct { IsUserAdmin bool } func handler(w http.ResponseWriter, r *http.Request) { isUserAdmin := isAdmin(r) data := TemplateData{IsUserAdmin: isUserAdmin} t.Execute(w, data) }</code>
テンプレート内:
{{if .IsUserAdmin}} <a href="/admin/nuke">Go to the big red nuclear button</a> {{end}}
コンテキストの埋め込み
別のオプションは、リクエスト コンテキストをカスタム コンテキストに埋め込むことです。テンプレートのデータ構造。これにより、テンプレート データとコンテキストの両方に同時にアクセスできます:
<code class="go">type TemplateData struct { Data interface{} Context *http.Request }</code>
テンプレート内:
{{if .Context.IsAdmin}} <a href="/admin/nuke">Go to the big red nuclear button</a> {{end}}
ファネル メソッド
Funcs メソッドはカスタム関数の定義に使用できますが、ユーザー権限の決定などの複雑なロジックの処理にはお勧めできません。このようなタスクはハンドラーまたはコントローラー内に保持することをお勧めします。
ベスト プラクティス
一般に、テンプレートを表示ロジックの処理に限定し、ビジネス ロジックの導入を避けることがベスト プラクティスと考えられます。またはコンテキストの依存関係をリクエストします。ただし、特定の状況では、特定のリクエスト情報にアクセスする必要がある場合があるため、上記のメソッドが使用されます。
以上が以下に、さまざまなトーンと具体性のレベルを調整した、いくつかのタイトル オプションを示します。 **直接的かつ有益:** * Go テンプレートでリクエスト コンテキストにアクセスする方法 * Go テンプレート: リクエストへのアクセスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。