4

change_form.htmlモデルの Django 管理ビューにコンテンツを追加するために、テンプレートをオーバーライドしたいと考えています。ドキュメントによるとchange_form.html、フォルダーにファイルを作成する必要があります/project-path/templates/admin/appname/modelname/。もちろん、このパスが で利用可能であることを確認する必要がありますTEMPLATE_DIRS。このようなファイルは次のようになります。

{% extends "admin/change_form.html" %}
{% load i18n  %}

{% block after_field_sets %}
SOME CONTENT
{% endblock %}

ただし、私はdjango-guardianを使用してオブジェクト権限を取得しています。この Django アプリもオーバーライドchange_form.htmlします (問題なく動作します。関連するソースはここにあるようです) が、Django はテンプレート拡張ファイルを取得しません (つまり、上記のサンプルの「SOME CONTENT」は表示されません)。オーバーライドしたいブロック/パーツは、django-guardian がオーバーライドするものと同じではなくchange_form.html、最終的には django-guardionテンプレートを追加したいと考えています。

ここで何が間違っていますか?また、管理テンプレートをオーバーライドする複数のアプリケーションを持つことはまったく可能ですか?

興味がある場合、これは私のTEMPLATE_LOADERS設定です:

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader'
)

また、django-guardian はINSTALLED_APPS配列の最後のアプリです。

4

2 に答える 2

5

考えられる解決策の 1 つは、 Django の general ではなく、 django-guardian のテンプレート (ここで定義) を参照してオーバーライドすることにより、継承チェーンを明示的に定義することchange_form.htmlです。したがって、使用する代わりに

{% extends "admin/change_form.html" %}

カスタムテンプレートの最初に、使用する必要があります

{% extends "admin/guardian/model/change_form.html" %}

GuardedModelAdminまた、サブクラス モデルを拡張して、独自のテンプレート ファイルを変更フォーム テンプレートとして明示的に使用する必要があります。

class MyModel(GuardedModelAdmin):
    change_form_template = 'admin/appname/mymodel/change_form.html'

これは機能しますが、テンプレートとモデルに明確な依存関係が追加されます。もちろん、モデルにはこの依存関係がありますが、デフォルトのみを参照するソリューションもあれば興味がありますがchange_form.html、これは実際には不可能だと思います。

于 2012-10-29T14:43:04.463 に答える
3

テンプレートへのパスが にある場合はTEMPLATE_DIRSTEMPLATE_LOADERS.

テンプレートがアプリにある場合は、配列の django-guardian のにアプリを追加する必要があります。INSTALLED_APPS

基本的に、名前の競合がある場合、最後にロードされたテンプレートが使用されます。

于 2013-09-13T06:47:46.827 に答える