私はDjangoプロジェクトでカスタムパーミッションアプリケーションを実装していますが、特定のオブジェクトインスタンスに対するログインユーザーの権限をチェックするカスタムテンプレートタグを実装する方法が失われています。チェックの結果に基づいてHTMLを表示します。私が今持っている何if..elseカスタムテンプレートタグ
は(擬似コード)である:
{% check_permission request.user "can_edit" on article %}
<form>...</form>
{% endcheck %}
( 'check_permissionは' 私のカスタムテンプレートタグです)。
templatetagは、ユーザー、権限、およびオブジェクトインスタンスを取り込み、囲まれたHTML(フォーム)を返します。これは現在正常に動作します。
私は何がやりたい、のようなものです:
{% if check_permission request.user "can_edit" on article %}
<form>...</form>
{% else %}
{{ article }}
{% endif %}
私はおよそthe assignment tagを読んだが、私の恐怖は、私が以前上書きされる可能性があります意味(これでコンテキスト変数空間を汚染だろうということです許可コンテキスト変数)。言い換えれば、コンテキスト変数が異なるレベル(私の場合はビュー、ミドルウェア、今はこの割り当てテンプレートタグ)で定義されているので、私は保守性について心配しています。
ありがとうございます、フィルタは確かにオプションになる可能性があります。私は、しかし、(インスタンスの基本的なCRUDだけでなく、いくつかの非常に具体的なもの)異なるアクセス許可を予見します。つまり、同じ量のカスタムテンプレートフィルタを作成する必要があります。おそらく、私は自分のカスタムアクセス許可モデルを考え直すべきでしょう。フィルターに複数の引数を渡すのが難しいと言うなら、それが可能であることを意味しますか?私はそうではないと思っていたので、これをちょっと明確にすることができますか? – LaundroMat
将来の訪問者へのアップデート:私は連鎖したフィルタで解決しようと考えています(例えば '{{request.user | has_permission:" entries.entry.can_edit、 "| has_permission_on:article}}'。)カスタムhas_permissionテンプレートフィルタユーザーと必要な権限を返します。has_permission_onはこれらの値を受け取り、記事変数と照合してTrueまたはFalseを返します。 – LaundroMat