覆盖我的应用程序之外的单个模型的django管理员更改表单?

时间:2016-08-04 20:19:31

标签: django django-templates django-admin

我目前正在我的应用中删除change_form.html,将其放入:

myproject/myapp/templates/admin/change_form.html

这很好但我真的只想覆盖User模型的更改表单,而不是其他任何内容。如果我放入它似乎不起作用:

myproject/myapp/templates/admin/user/change_form.html

我猜这是因为User模型不是来自我的应用程序?

在某些其他应用程序(即change_list.html应用程序)中覆盖django.contrib.auth特定模型的最简洁方法是什么?

来自settings.py的相关摘要:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'unicorn.context_processors.site_url',
                'unicorn.context_processors.consultant_data',
                'unicorn.context_processors.branding',
            ],
            'builtins': ['tracking.templatetags.tracking_extras'],
            'loaders': [
                'django.template.loaders.filesystem.Loader',
                'django.template.loaders.app_directories.Loader',
            ],
        },
    },
]

4 个答案:

答案 0 :(得分:0)

settings.py

TEMPLATES = [
    {
        'BACKEND': ...,
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
        ],
        ...
    }
]

admin/auth/user/change_form.html放在项目的templates目录中。

答案 1 :(得分:0)

看起来您需要将应用程序名称添加到模板的完整路径,因此应该是

myproject/myapp/templates/admin/myapp/user/change_form.html

答案 2 :(得分:0)

晚4年了,但是有人在寻找答案- 如果像我一样安装了Grappelli软件包,则可以通过转到python/lib/site-packages/grappelli并在此处寻找change_form.html来解决问题。该软件包将覆盖我的自定义模板,因此我对grappelli文件进行了更改。

答案 3 :(得分:0)

适用于 Django 3.2+ 首先你需要在你的项目中创建一个类似的管理模板结构目录:

- project_dir
- app
- templates/admin/ <---
- venv

然后复制 change_form.html 来自venv/lib/python[ver]/site-packages/dajngo/contrib/admin/templates/ 进入:/templates/admin/change_form.html 这是您项目中的模板文件夹 这假设您是否使用 virtualenv

然后将 settings.py 设置为:

import os
...
TEMPLATES = [
    {
        ...
        'DIRS': [os.path.join(BASE_DIR, 'templates/')],
        'APP_DIRS': True,
        ...

然后你可以修改你已经复制的/templates/admin/change_form.html, 例如,您只想为用户模型显示一些文本,您可以执行以下操作:

寻找行:{% block field_sets %} 及以下放置:

{% if opts.model_name == "user" %} Put Your Text Here {% endif %}

看起来像这样:

{% block field_sets %}
{% if opts.model_name == "user" %} Put Your Text Here {% endif %}

您可以用您想要的任何模型替换 user

相关问题