Django-管理站点重写admin模板

使用Django的admin管理工具,可以快速的构建自己的管理平台,使用Django原生太的模板更能使我们节省很多工作量。但有时候,模板上展现的内容并不能满足我们的业务需求,我们需要些许调整就可以达到我们想要的效果,此时我们可以通过重写admin模板来实现。

我们继续使用前面两篇文档中所使用的项目,并在此基础上来作调整。我们假设我们只允许添加Vm、查看Vm,不允许编辑Vm信息。因为添加、查看、编辑使用的是同一个模板文件,就必须重写模板文件。

重写模板

关键步骤
  1. 首先在我们的项目根目录下建立一个子templates目录 。

  2. 其次在templates目录下建立一个admin子目录。

  3. 然后在admin目录下以我人的应用名建立一个子目录(需要小写),如我们的应用cloud 。

  4. 在应用目录下以模型层的名字建立一个子目录(需要小写),如在cloud目录下创建vm目录。

  5. 我们从django/contrib/admin/templates/admin目录下拷贝change_form.html文件到我们新建立的vm目录下。

  6. 项目目录结构


    Django-管理站点重写admin模板_第1张图片
    重写模板.png
  7. 修改setting.py文件中的配置项TEMPLATES, 将DIRS的值设置为[os.path.join(BASE_DIR, 'templates')]。TEMPLATES的整体信息如下:

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')],
            'APP_DIRS': True,
            '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',
                ],
            },
        },
    ]
    
  8. 修改chang_form.html文件

修改chang_form.html文件
  1. 去除{% block object-tools %}……{% endblock %}代码块,如图示:

    Django-管理站点重写admin模板_第2张图片
    重写模板_去除代码.png
  2. 去除{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}代码,如图所示:

    Django-管理站点重写admin模板_第3张图片
    重写模板_去除代码_操作按钮.png
  3. 在{% block after_related_objects %}{% endblock %}代码后面新增代码{% if add %}{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}{% endif %},如图示:

Django-管理站点重写admin模板_第4张图片
重写模板_增加此行代码.png
  1. 启动项目,查看运行结果,新增信息时,有提交按钮,编辑页没有提交按钮。如图所示:
    Django-管理站点重写admin模板_第5张图片
    新增.png
    Django-管理站点重写admin模板_第6张图片
    修改.png
修改站点名称与Title

从 django/contrib/admin/templates/admin 目录下拷贝base_site.html文件至项目/templates/admin目录下。修改base_site.html,使之内容如下:

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

{% block title %}云主机管理{% endblock %}

{% block branding %}

云主机管理

{% endblock %} {% block nav-global %}{% endblock %}

查看修改后效果:
Django-管理站点重写admin模板_第7张图片
修改站点名称与Title.png

补充

如果想整个站点以中文的形式展现,我们需要做一些全局配置。在settings.py文件中,找到LANGUAGE_CODE与TIME_ZONE,分别设置为‘zh-hans’与‘Asia/Shanghai’,修改之后,代码如下:

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

启动服务,查看效果,我们会发现界面以中文展现:


Django-管理站点重写admin模板_第8张图片
中文显示.png

知识链接

Admin模板文件位于contrib/admin/templates/admin 目录中。

如要覆盖一个或多个模板,首先在你的项目的templates 目录中创建一个admin 目录。它可以是你在TEMPLATES 设置的DjangoTemplates 后端的DIRS 选项中指定的任何目录。如果你已经自定义'loaders' 选项,请确保'django.template.loaders.filesystem.Loader' 出现在 'django.template.loaders.app_directories 之前。Loader',以便在包含django.contrib.admin的模板之前,模板加载系统可以找到您的自定义模板。

为一个特定的app重写admin模板, 需要拷贝django/contrib/admin/templates/admin 目录到你创建的app目录下, 并且修改它们.

如果我们只想为名为“Page”的特定模型添加一个工具到更改列表视图,我们将把同一个文件复制到我们项目的templates/admin/my_app/page目录。

每个应用或模型中可以被重写的模板

不是contrib/admin/templates/admin 中的每个模板都可以在每个应用或每个模型中覆盖。以下可以 ︰

app_index.html
change_form.html
change_list.html
delete_confirmation.html
object_history.html

对于那些不能以这种方式重写的模板,你可能仍然为您的整个项目重写它们。只需要将新版本放在你的templates/admin 目录下。这对于要创建自定义的404 和500 页面特别有用。

你可能感兴趣的:(Django-管理站点重写admin模板)