个性化定制页面

原始登陆界面:

如果需要修改页面样式,这里只修改登录页面的样式,可以修改对应的页面模板,通过模板的继承将自己定制的模板把系统登录的模板给覆盖掉。

首先找到对应页面的系统模板,复制其内容:

然后在自己项目的templates目录中创建admin文件夹,并在admin中新建login.html的模板,粘贴之前复制的内容。

修改登录框

现在把登录框中的Django管理修改成其他名字,可以在刚刚创建的login.html中重写在base_site.html中定义的模板
login.html中添加18-20行的内容:

{% extends "admin/base_site.html" %}
{% load i18n static %}

{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/login.css" %}" />
{{ form.media }}
{% endblock %}

{% block bodyclass %}{{ block.super }} login{% endblock %}

{% block usertools %}{% endblock %}

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

{% block content_title %}{% endblock %}

{% block breadcrumbs %}{% endblock %}

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">佩奇小课堂</a></h1>
{% endblock %}


{% block content %}

{% if form.errors and not form.non_field_errors %}
<p class="errornote">
{% if form.errors.items|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %}
</p>
{% endif %}

{% if form.non_field_errors %}
{% for error in form.non_field_errors %}
<p class="errornote">
    {{ error }}
</p>
{% endfor %}
{% endif %}

<div id="content-main">

{% if user.is_authenticated %}
<p class="errornote">
{% blocktrans trimmed %}
    You are authenticated as {{ username }}, but are not authorized to
    access this page. Would you like to login to a different account?
{% endblocktrans %}
</p>
{% endif %}

<form action="{{ app_path }}" method="post" id="login-form">{% csrf_token %}
  <div class="form-row">
    {{ form.username.errors }}
    {{ form.username.label_tag }} {{ form.username }}
  </div>
  <div class="form-row">
    {{ form.password.errors }}
    {{ form.password.label_tag }} {{ form.password }}
    <input type="hidden" name="next" value="{{ next }}" />
  </div>
  {% url 'admin_password_reset' as password_reset_url %}
  {% if password_reset_url %}
  <div class="password-reset-link">
    <a href="{{ password_reset_url }}">{% trans 'Forgotten your password or username?' %}</a>
  </div>
  {% endif %}
  <div class="submit-row">
    <label>&nbsp;</label><input type="submit" value="{% trans 'Log in' %}" />
  </div>
</form>

</div>
{% endblock %}

测试:


重写css样式

新建static文件夹,新建css文件夹,新建login.css,复制系统原有的css,方便之后修改

在settings.py中注册static路径:

STATICFILES_DIRS=[
    os.path.join(BASE_DIR, 'static')
]

修改login.html中的配置:

{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "/css/login.css" %}" />

之后修改css内容就能修改对应的页面样式了:


自定义站点信息

除了直接修改前端模板中的网站信息,还可以在admin中设置站点信息。

admin

在admin中继承自AdminSite:

from django.contrib import admin

from sendemail.models import Grade, Student


class MyAdminSite(admin.AdminSite):
    pass


site = MyAdminSite()  # 手动创建一个对象用来管理注册,那么下面注册时也需要修改


class StudentInfo(admin.TabularInline):
    extra = 3  # 插入班级时,需要级联数据的数量,也就是需要填写学生信息的数量
    model = Student  # 绑定Student模型


class GradeAdmin(admin.ModelAdmin):
    list_display = ['g_name', 'g_position']
    inlines = [StudentInfo]  # 使用inlines,后面填写级联的类名


site.register(Grade, GradeAdmin)


class StudentAdmin(admin.ModelAdmin):
    def sex(self):
        if self.s_sex:
            return '女'
        else:
            return '男'

    sex.short_description = '性别'  # 列属性名称修改
    list_display = ['s_name', 's_age', sex]

    fieldsets = (
        ('基本信息', {'fields': ('s_name', 's_age', 's_sex')}),
        ('可选信息', {'fields': ('s_height', 's_weight')}),
    )


site.register(Student, StudentAdmin)
  • 首先要自己注册一个site
  • 下面对应注册时,需要使用自己注册的site来注册

    总urls修改

    在总urls中路由也要修改成刚刚手动注册的site路径:

    from django.urls import path, include
    
    from sendemail.admin import site
    
    urlpatterns = [
      path('admin/', site.urls),
      path('app/', include('App.urls')),
      path('send/', include('sendemail.urls')),
    ]

    登录管理页面查看:

由于使用了刚刚手动创建的定制化site,管理页面只显示了sendemail中的管理信息。

自定义站点信息好处

好处是可以提供一些属性修改。
点击AdminSite查看部分源代码:

    # Text to put at the end of each page's <title>.
    site_title = gettext_lazy('Django site admin')

    # Text to put in each page's <h1>.
    site_header = gettext_lazy('Django administration')

    # Text to put at the top of the admin index page.
    index_title = gettext_lazy('Site administration')

比如可以重写site_title,在admin.py中:

class MyAdminSite(admin.AdminSite):
    site_title= 'Learn'
    site_header = '佩奇'

刷新页面:


网站的title就能设置了。



并且头部标题也能修改。

查看站点跳转页面

下面要实现点击查看站点,自动跳转到主页的功能。

为了测试,在sendemail中写一个新页面

urls

path(r'home/', views.home),

views

def home(request):
    return HttpResponse('要结束了。')

admin

添加site_url,参数注意'/':

class MyAdminSite(admin.AdminSite):
    site_title= 'Learn'
    site_header = '佩奇'
    site_url = '/send/home'

以上就是内置的admin。

第三方管理后台

github上有:https://github.com/vinta/awesome-python#admin-panels

例如:

最后修改:2024 年 03 月 13 日
如果觉得我的文章对你有用,请随意赞赏