【问题标题】:Override django admin change form for a single model outside of my app?为我的应用程序之外的单个模型覆盖 django 管理员更改表单?
【发布时间】:2016-12-11 03:10:12
【问题描述】:

我目前在我的应用程序中覆盖change_form.html,方法是将其放入:

myproject/myapp/templates/admin/change_form.html

这很好,但我真的只想覆盖User 模型的更改表单,没有别的。如果我把它放进去,它似乎不起作用:

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

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

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


来自settings.py的相关sn-ps:

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',
            ],
        },
    },
]

【问题讨论】:

    标签: django django-templates django-admin


    【解决方案1】:

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

    myproject/myapp/templates/admin/<b>myapp/</b>user/change_form.html

    【讨论】:

      【解决方案2】:

      settings.py

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

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

      【讨论】:

      • 试过了,不工作...如果我把它放在admin/auth/change_form.html,但如果我把它放在admin/auth/user/change_form.html,它就不行。我还在我的问题中添加了TEMPLATES 的价值。
      【解决方案3】:

      对于 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 替换为您想要的任何型号。

      【讨论】:

        【解决方案4】:

        晚了 4 年,但任何人都在寻找答案-- 如果您像我一样安装了 Grappelli 软件包,您的问题可以通过转到 python/lib/site-packages/grappelli 并在那里查找 change_form.html 来解决。这个包覆盖了我的自定义模板,所以我对 grappelli 文件进行了更改。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-04-25
          • 2011-01-24
          • 1970-01-01
          • 2011-10-30
          • 2015-06-09
          • 2010-11-19
          • 1970-01-01
          • 2011-07-26
          相关资源
          最近更新 更多