Django Admin Cookbook-6如何覆盖Django Admin后台模板?
返回目录#
6.如何覆盖Django Admin后台模板?#
原文链接:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-admin-templates
你可以覆盖Django Admin后台,不同页面模板来生成自定义的管理后台。你也可以只对某个特定应用或模型来覆盖某一部分模板文件。
设置你项目的Admin后台模板目录#
默认Admin后台模板文件位于contrib/admin/templates/admin目录中。
为了覆盖其中的一个或多个,首先admin在项目目录中创建一个templates目录。该目录可以是您在设置DIRS的DjangoTemplates后端选项中 指定的任何目录TEMPLATES。如果您已经自定义了该'loaders'选项,请确保 'django.template.loaders.filesystem.Loader'在之前出现,'django.template.loaders.app_directories.Loader'以便模板加载系统可以在随附的自定义模板之前 找到您的自定义模板django.contrib.admin。
在此admin目录中,创建以您的应用程序命名的子目录。在这些应用程序子目录中,创建以模型命名的子目录。请注意,管理应用程序在查找目录时将小写模型名称,因此,如果要在区分大小写的文件系统上运行应用程序,请确保将目录命名为小写。
要覆盖特定应用程序的管理模板,可以从django/contrib/admin/templates/admin目录复制并编辑该模板,然后将其保存到刚创建的目录之一。
例如,如果我们想在名为的应用程序中为所有模型的更改列表视图添加工具my_app,我们将复制 contrib/admin/templates/admin/change_list.html到 templates/admin/my_app/项目目录,并进行必要的更改。
如果我们只想为名为“Page”的特定模型向更改列表视图添加工具,则可以将该文件复制到 templates/admin/my_app/page项目目录中。
覆盖与替换Admin模板#
由于管理模板的模块化设计,通常既不需要也不建议更换整个模板。最好只覆盖需要更改的模板中的部分内容。
要继续上面的示例,我们想History在Page模型工具旁边添加一个新链接 。查看后,change_form.html 我们确定只需要覆盖该object-tools-items块。因此,这是我们的新产品change_form.html代码为:
{% extends "admin/change_form.html" %}
{% load i18n admin_urls %}
{% block object-tools-items %}
<li>
<a href="{% url opts|admin_urlname:'history' original.pk|admin_urlquote %}" class="historylink">{% translate "History" %}</a>
</li>
<li>
<a href="mylink/" class="historylink">My Link</a>
</li>
{% if has_absolute_url %}
<li>
<a href="{% url 'admin:view_on_site' content_type_id original.pk %}" class="viewsitelink">{% translate "View on site" %}</a>
</li>
{% endif %}
{% endblock %}
就是这样!如果我们将此文件放在templates/admin/my_app 目录中,则链接将显示在my_app中所有模型的更改表单上。
每个应用程序或模型可以覆盖的模板#
并非每个contrib/admin/templates/admin下的模板都可以被应用程序或模型覆盖。以下模板页面支持应用或模型级的覆盖:
- actions.html
- app_index.html
- change_form.html
- change_form_object_tools.html
- change_list.html
- change_list_object_tools.html
- change_list_results.html
- date_hierarchy.html
- delete_confirmation.html
- object_history.html
- pagination.html
- popup_response.html
- prepopulated_fields_js.html
- search_form.html
- submit_line.html
对于那些无法以这种方式覆盖的模板,你仍然可以通过将修改后的版本放在templates/admin目录中来覆盖整个项目的模板 。这对于创建自定义404和500页面特别有用。
注意:一些Admin模板(如change_list_results.html用于呈现自定义包含标签)。这些标签可能会被覆盖,但是在这种情况下,最好创建自己的相关标签版本并为其指定一个不同的名称。这样,你可以有选择地使用它。
作者:韩志超
出处:https://www.cnblogs.com/superhin/p/12165503.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
如有问题,请微信联系 superz-han,并发送原文链接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗