自定义 Django 管理模板

Posted

技术标签:

【中文标题】自定义 Django 管理模板【英文标题】:Customize Django admin template 【发布时间】:2018-09-07 02:20:59 【问题描述】:

我尝试像这样自定义导航栏

Base_site.html

 % block nav-global %
 <img class = "brand_img" src = "% static 'images/ic_launcher.png'%" 
    width = "50" height = "50" alt = "logo">
 %block branding%    

  % endblock %
  <div class = "head">
    <h1 id = "name">Admin Dashboard</h1>
  </div>    
% endblock %

看起来像这样

现在我尝试在 %block branding% 中添加登录页面的标题

但如果我在品牌块内添加它也会显示在导航栏中,如果我尝试在品牌块中添加图像和标题图像将显示登录页面标题。

如何为导航栏和登录页面标题添加不同的标题?

【问题讨论】:

【参考方案1】:

这很容易实现。

在您的templates 文件夹中,您应该已经创建了一个admin 子文件夹。在那里,您应该将文件 base_site.htmllogin.html 放在里面。

base_site.html的内容:

% extends 'admin/base_site.html' %

% load static %

% block branding %
    <div class="head">
        <h1 id="name">Admin Dashboard</h1>
    </div>
% endblock %

% block nav-global %
    <img class="brand_img" src="% static 'images/ic_launcher.png'%"   >
% endblock %

login.html的内容:

% extends 'admin/login.html' %

% block branding %
    <div class="head">
        <h1 id="name">Custom header text for LOGIN screen only</h1>
    </div>
% endblock %

以下是正确的项目结构:

project/
    myapp/
    myapp2/
    project/
    templates/
        admin/
            base_site.html
            login.html
    manage.py

请注意您要覆盖的每个 html 模板中的 extends。这是至关重要的。欲了解更多信息,请查看docs。

【讨论】:

如何将徽标放在name 标签之前?我可以在 OP 图像中看到徽标似乎位于页面名称的左侧。却得不到效果。会有什么办法? 我认为它应该像交换 % block branding %% block nav-global %. 中的内容一样简单,或者覆盖 % block branding % 并将 h1img 都放在那里,然后声明并留空% block nav-global %. 第二个技巧根本不起作用(名称值完全丢失)。第一种方法奏效了。不过namelogo之间没有空格,好像骑在logo上一样!! 如果问题是水平空间问题,可以根据您的需要通过#name margin-left: 20px;等CSS规则或类似规则解决。但这是另一个通过屏幕截图提出的问题,以便可视化您的问题。【参考方案2】:

我发现你需要像这样调整DIRS in TEMPLATES in settings.py

TEMPLATES = [
    
        'BACKEND': .....,
        'DIRS': [os.path.join(BASE_DIR, 'templates')], # <-- add this line here
        'APP_DIRS': True,
        'OPTIONS': 
            'context_processors': [
                .....
            ],
        ,
    ,
]

这是告诉您的应用程序在哪里查找这些文件所必需的。除了上面@nik_m 的解决方案之外,这对我有用....

【讨论】:

以上是关于自定义 Django 管理模板的主要内容,如果未能解决你的问题,请参考以下文章

Django 如何将自定义变量传递给上下文以在自定义管理模板中使用?

`Django 管理`到项目模板中的自定义标题

在 django 中覆盖管理模板以添加自定义 javascript

在自定义模板标签中解析 Django 自定义模板标签

如何在自定义模板中使用 Django 的管理员布尔图标?

django admin 自定义模板页面未找到错误