个性化定制页面
原始登陆界面:
如果需要修改页面样式,这里只修改登录页面的样式,可以修改对应的页面模板,通过模板的继承将自己定制的模板把系统登录的模板给覆盖掉。
首先找到对应页面的系统模板,复制其内容:
然后在自己项目的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> </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" %}" />
自定义站点信息
除了直接修改前端模板中的网站信息,还可以在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
总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就能设置了。
查看站点跳转页面
下面要实现点击查看站点,自动跳转到主页的功能。
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
例如:
- xadmin
- django-suit
- django-grappelli
- 等等
此处评论已关闭