4

django admin change_list ページをオーバーライドしたいのですが、実際のオブジェクトを取得する方法が見つからないため、次のようなプロパティにアクセスできますobject.name

テンプレートには、このコードがあります

<tr >{% for item in result %}{{ item }}{% endfor %}</tr>

私が使用できる実際のオブジェクトはどこですか

編集:

result行がアイテム、列がアイテムのように見えます。私は何かが欲しいresult.pk

結果が得られる場合、これはリストを生成します

https://github.com/django/django/blob/master/django/contrib/admin/templatetags/admin_list.py#L175

4

2 に答える 2

17

に渡されるコンテキストには、結果リストを含むオブジェクトであるオブジェクトに対応するエントリがchange_list.html含まれます。clcontrib.admin.views.main.ChangeList

次のように、結果リストに直接アクセスできます。

{% for object in cl.result_list %}
{{ object.field }}
{% endfor %}

変更リストの結果は、テンプレート タグchange_list_results.htmlを使用してテンプレートの一部としてレンダリングされます。テンプレートには、テンプレートをレンダリングするときに存在するコンテキスト変数もありresult_listます。change_list_results.htmlcl

resultあなたの例でDjangoテンプレートが反復されている場合、事前にレンダリングされたhtmlをresult含むResultListオブジェクトであり、レンダリングされている基礎となるオブジェクトは利用できません。

このレベルでテンプレートをオーバーライドするにはresult_list、各結果に属性として添付された基礎となるオブジェクトを含む結果のリストを返すことができる、独自のタイプ テンプレート タグを実装する必要がある可能性があります。

要するに、次のことが必要になる可能性があります。

  • result_listDjango の実装に基づいて、独自のテンプレート タグを作成します。事前にレンダリングされたhtmlresultsのリストとしてコンテキストを返すのではなく、html にレンダリングできる両方のオブジェクトを含むオブジェクトと、後でテンプレートで使用するために添付された元の基本オブジェクトを持つ各アイテムを返します。ResultListresults
  • テンプレートをオーバーライドして、Django のテンプレート タグchange_list.htmlではなく、新しいタグを使用します。result_list
  • テンプレートをオーバーライドして、change_list_results.html基になる各オブジェクトの存在など、テンプレート タグから入手できる追加情報を利用します。

お気づきかもしれませんが、管理アプリはレイヤーを介して非常に緊密に統合されています。その操作を変更することは簡単ではなく、ソースの複数の部分で変更とオーバーライドが必要です。

于 2013-04-19T04:11:29.737 に答える