2011-01-25 30 views
20

django管理用テンプレートを拡張することについて(そうではない)簡単な質問です。Django管理用テンプレートの拡張 - 変更用リストの変更

特定のモデルの結果リスト(django lingoのリストを変更する)を、そのオブジェクトに関連するいくつかのオブジェクトを含む結果行(row1とrow2クラス)の間に中間行を追加して変更しようとしています。

コードを検索しましたが、これを行う方法が見つかりませんでした。どのポインタも非常に感謝しています。コードも役立ちます。

PS:自分のインターフェイスを設計する必要があることは分かっていますが、これは内部プロジェクトであり、余裕がありません。また、djangoインターフェイスは本当に素晴らしいです。

ありがとうございます。

+1

admin.pyには、通常のメソッドをオーバーライドするのに役立ついくつかの機能があります... [こちらをチェックしてください](http://docs.djangoproject.com/en/dev/ref/contrib/admin/ #他の方法)...彼らはあなたを助けるかもしれません... – FallenAngel

答えて

27

ステップ1:あなたはadd_view/change_viewでできるように1を指定するとは対照的に、テンプレートを上書きする必要があります
:チェンジビュー
をオーバーライド。

最初にまず、 def changelist_view(self, request, extra_context=None):ModelAdminに置き換えてください。 super(foo, self).changelist_view(request, extra_context)に電話し、それを返すことを忘れないでください。

ステップ2:上書きテンプレート
次に、(あなたがしたい場合..あなたはあまりにもグローバルチェンジのオーバーライドを使用することができるかどうか)templates/admin/my_app/my_model/change_list.htmlでアプリケーション固有のチェンジテンプレートを上書きします。

ステップ3:コピー結果リスト機能
は、私はあなたのビューに含めることresult_list機能やテンプレートをコピーして貼り付けてresult_list機能(新しいテンプレートタグを定義する)または偽をコピーすることができますどちらかと思います。

# django.contrib.admin.templatetags.admin_list 
def result_list(cl): 
    """ 
    Displays the headers and data list together 
    """ 
    return {'cl': cl, 
      'result_hidden_fields': list(result_hidden_fields(cl)), 
      'result_headers': list(result_headers(cl)), 
      'results': list(results(cl))} 
result_list = register.inclusion_tag("admin/change_list_results.html")(result_list) 

あなたは、管理者はこのテンプレートタグを置き換えるための方法のいずれかを使用する必要がありますので、個々の列をレンダリングするために、このadmin/change_list_results.htmlテンプレートを使用して見ることができます。

グローバルテンプレートを探しているので、私はそれを上書きしません。

あなたのビュー専用の新しいテンプレートを定義するか、テンプレートにresult_list(cl)を直接送信して、change_list.htmlテンプレートで直接使用するadmin/change_list_results.htmlを採用してください。ここで、雄二の答えに拡大すること

+1

これは魅力のように働いた。 result_list(cl)のclの属性を少しデバッグする必要がありました。それ以外にも、大変感謝しています! :-) – Weholt

30

は、ステップ1で前述した、ともhere at djangoprojectを説明するようchange_list_results.html ...


オーバーライドchangelist_viewをオーバーライドする上でいくつかの詳細です。 または上記の手順2のように適切なディレクトリに配置することによって自動上書きします。 (上記のステップ2のパスはモデル固有であることに注意してください.App固有のものは、TEMPLATE_DIRSタプルで定義されたディレクトリの下に/admin/<MyAppName>/change_list.htmlとなります。おそらく簡単に)

それとも()任意の検出可能テンプレートファイル名でhereを説明したように、単純にModelAdmin.change_list_templateを指定します。最低でも持っている、あなたのchange_list.htmlテンプレートで

class MyModelAdmin(admin.ModelAdmin): 
    change_list_template = 'change_list.html' # definitely not 'admin/change_list.html' 
    # ... 

(名前change_list.htmlを保持している場合、extendsタグは再帰の原因となります他、/adminフォルダに直接堆積しないようにしてください。、けれども)

{% extends "admin/change_list.html" %} 
{% load i18n admin_static admin_list %} 
{% load myapptags %} 

{% block result_list %} 
    {% if action_form and actions_on_top and cl.full_result_count %}{% admin_actions %}{% endif %} 
    {% result_list cl %} 
    {% if action_form and actions_on_bottom and cl.full_result_count %}{% admin_actions %}{% endif %} 
{% endblock %} 

__init__.pyを含む/<MyAppName>/templatetagsパッケージ(ディレクトリを作成します。 )コピー

# MyAppName/templatetags/myapptags.py 

from django import template 
from django.contrib.admin.templatetags.admin_list import result_list 

register = template.Library() 
register.inclusion_tag('my_change_list_results.html')(result_list) 

上記負荷タグに対応するファイルを有するとDjangoのchange_list_results.html(例えばように編集上記のmy_change_list_results.html)を使用して、追加した機能を使用します。

これらの手順には、テンプレートの余分なコンテキストは含まれていませんが、簡単に拡張できることに注意してください。 (これを行うための私の理由は、CSSのクラスと結果リストでソートされなかった大手<tbody>を追加することでした。)


追加

は、余分なコンテキストを含めるあなたのtemplatetagsモジュールを変更するには次のように続いて

# MyAppName/templatetags/myapptags.py 

from django import template 
from django.contrib.admin.templatetags.admin_list import result_list as admin_list_result_list 

def result_list(cl): 
    mycl = {'myextracontext': 'something extra'} 
    mycl.update(foo_extra()) 
    mycl.update(admin_list_result_list(cl)) 
    return mycl 

register = template.Library() 
register.inclusion_tag('my_change_list_results.html')(result_list) 

myextracontextまたは何foo_extra戻り値として、例えば{{ myextracontext }}(検索結果テンプレートに含めることができます)

+0

私はこの答えの構造を理解できませんでした! – Pranab

関連する問題