Go テンプレートでのリクエスト コンテキストの使用
Go テンプレートでは、トリガーとなるリクエストの情報にアクセスする必要がある状況が発生する場合があります。現在のユーザーが管理者であるかどうかを判断するなど。ただし、テンプレートにはリクエスト コンテキストの固有の認識がありません。
解決策: パイプライン
一般的なアプローチの 1 つは、パイプラインを使用して必要なデータをハンドラーからテンプレートに渡すことです。 。これには、関連するコンテキスト情報を含むパイプライン変数を作成し、テンプレート内でその変数にアクセスすることが含まれます。例:
type TemplateData struct {
IsUserAdmin bool
}
func handler(w http.ResponseWriter, r *http.Request) {
isUserAdmin := isAdmin(r)
data := TemplateData{IsUserAdmin: isUserAdmin}
t.Execute(w, data)
}
テンプレート内:
{{if .IsUserAdmin}} Go to the big red nuclear button {{end}}
コンテキストの埋め込み
別のオプションは、リクエスト コンテキストをカスタム テンプレート データ構造に埋め込むことです。これにより、テンプレート データとコンテキストの両方に同時にアクセスできるようになります。
type TemplateData struct {
Data interface{}
Context *http.Request
}
テンプレート内:
{{if .Context.IsAdmin}} Go to the big red nuclear button {{end}}
Funnel メソッド
Funcs メソッドはカスタム関数の定義に使用できますが、ユーザー権限の決定などの複雑なロジックの処理にはお勧めできません。このようなタスクはハンドラーまたはコントローラー内に保持することをお勧めします。
ベスト プラクティス
一般に、テンプレートを表示ロジックの処理に限定し、ビジネス ロジックの導入を避けることがベスト プラクティスと考えられます。またはコンテキストの依存関係をリクエストします。ただし、特定の状況では、特定のリクエスト情報にアクセスする必要がある場合があるため、上記のメソッドが使用されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3