环境信息
admin 模板解析
Django 模板之间存在各种复杂的继承关系,最基础的模板为 base.html
,文件位于 python3.11/site-packages/django/contrib/admin/templates/admin/base.html
。下面以 Admin 页面中的各个模块来解析实现对应模块的模板及代码。
title
title
指网页标题,以 Admin 站点的首页为例,首页的模板文件 index.html
中未定义 title
信息,而是继承自 base_site.html
base_site.html{% extends "admin/base.html" %}
{% block title %}{% if subtitle %}{{ subtitle }} | {% endif %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
|
base_site.html
模板继承了模板 base.html
,并使用 {% block title %}
标签复写了继承自 base.html
模板的 title
信息。默认显示 Django site admin
,如果应用的 admin.py
中定义了 admin.site.site_title
,则显示其内容
base.html{% load i18n static %}<!DOCTYPE html> {% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %} <html lang="{{ LANGUAGE_CODE|default:"en-us" }}" dir="{{ LANGUAGE_BIDI|yesno:'rtl,ltr,auto' }}"> <head> <title>{% block title %}{% endblock %}</title>
|
基础模板 base.html
中 title
信息默认为空。
Django 管理或站点标题
Admin 管理页面最顶部左上角会展示默认的 Django 管理
或者站点标题,如果应用的 admin.py
中配置了 admin.site.site_header
,则显示站点标题,这是一个链接,点击后会跳转首页。
这部分的实现是通过继承 base_site.html
实现,其中的 {% block branding %}
定义了这部分内容。
base_site.html{% extends "admin/base.html" %}
{% block title %}{% if subtitle %}{{ subtitle }} | {% endif %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
{% block branding %} <h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1> {% endblock %}
{% block nav-global %}{% endblock %}
|
用户欢迎信息
Django admin 站点默认会显示如下的欢饮信息及修改密码、注销等链接
此处的配置位于 base.html
中的 {% block usertools %}
块内,{% block usertools %}
块位于 {% block header %}
块内。
base.html{% block header %} <div id="header"> <div id="branding"> {% block branding %}{% endblock %} </div> {% block usertools %} {% if has_permission %} <div id="user-tools"> {% block welcome-msg %} {% translate 'Welcome,' %} <strong>{% firstof user.get_short_name user.get_username %}</strong>. {% endblock %} {% block userlinks %} {% if site_url %} <a href="{{ site_url }}">{% translate 'View site' %}</a> / {% endif %} {% if user.is_active and user.is_staff %} {% url 'django-admindocs-docroot' as docsroot %} {% if docsroot %} <a href="{{ docsroot }}">{% translate 'Documentation' %}</a> / {% endif %} {% endif %} {% if user.has_usable_password %} <a href="{% url 'admin:password_change' %}">{% translate 'Change password' %}</a> / {% endif %} <a href="{% url 'admin:logout' %}">{% translate 'Log out' %}</a> {% endblock %} </div> {% endif %} {% endblock %} {% block nav-global %}{% endblock %} </div> {% endblock %}
|
自定义页面
自定义和 Django admin 风格一样的页面
如果要自定义自己的页面,并实现和 Django admin 一致的风格,比如一样的 branding 和用户欢迎信息,可以使用如下代码实现
{% extends "admin/base_site.html" %} {% load i18n static %}
{% block title %} My Customize Site {% endblock %}
{% block extrastyle %}
{% endblock %}
{% block branding %} <h1 id="site-name"><a href="{% url 'admin:index' %}">My Customize Site</a></h1> {% endblock %}
{% block usertools %} <div id="user-tools"> {% block welcome-msg %} {% translate 'Welcome,' %} <strong>{% firstof user.get_short_name user.get_username %}</strong>. {% endblock %} {% block userlinks %} {% if site_url %} <a href="{{ site_url }}">{% translate 'View site' %}</a> / {% endif %} {% if user.is_active and user.is_staff %} {% url 'django-admindocs-docroot' as docsroot %} {% if docsroot %} <a href="{{ docsroot }}">{% translate 'Documentation' %}</a> / {% endif %} {% endif %} {% if user.has_usable_password %} <a href="{% url 'admin:password_change' %}">{% translate 'Change password' %}</a> / {% endif %} <a href="{% url 'admin:logout' %}">{% translate 'Log out' %}</a> {% endblock %} </div>
{% endblock %}
{% block breadcrumbs %}{% endblock %} {% block content %} hello world {% endblock %}
|