django-admin-interface
django-admin-interface 是一个现代的响应式扁平化管理界面,可由管理员自定义。
特性
- 漂亮的默认 django 主题
- 主题管理和自定义 (你可以自定义管理标题、logo 和颜色)
- 响应式设计
- 相关模态框 (替代旧的弹出窗口)
- 环境名称/标记
- 语言选择器
- 可折叠应用 (导航栏中的手风琴)
- 可折叠字段集 的初始状态可以是展开而不是折叠
新功能
可折叠的内联新功能
标签式字段集和内联新功能
列表过滤器移除链接新功能
列表过滤器高亮选中选项- 列表过滤器下拉菜单
- 列表过滤器固定
- 表单控件固定 (分页和保存/删除按钮)
- 兼容性 / 样式优化:
django-ckeditor
django-dynamic-raw-id
django-json-widget
django-modeltranslation
django-rangefilter
django-streamfield
django-tabbed-admin
sorl-thumbnail
- 已翻译成多种语言:
de
、es
、fa
、fr
、it
、pl
、pt_BR
、ru
、tr
安装
- 运行
pip install django-admin-interface
- 在
settings.INSTALLED_APPS
中添加admin_interface
和colorfield
,放在django.contrib.admin
之前
INSTALLED_APPS = (
#...
"admin_interface",
"colorfield",
#...
"django.contrib.admin",
#...
)
X_FRAME_OPTIONS = "SAMEORIGIN"
SILENCED_SYSTEM_CHECKS = ["security.W019"]
- 运行
python manage.py migrate
- 运行
python manage.py collectstatic --clear
- 重启你的应用服务器
[!警告] 如果你想使用模态框而不是弹出窗口,请确保添加
X_FRAME_OPTIONS = "SAMEORIGIN"
设置。
可选功能
要让字段集以展开状态开始,并有一个 隐藏
按钮来折叠,请在其类中添加 "expanded"
类:
class MyModelAdmin(admin.ModelAdmin):
# ...
fieldsets = [
("章节标题", {
"classes": ("collapse", "expanded"),
"fields": (...),
}),
]
# ...
可选主题
本包附带了一些可选主题作为 fixtures,可以使用 loaddata 管理命令 安装。可选主题在安装时会被激活。
Django 主题(默认):
运行 python manage.py loaddata admin_interface_theme_django.json
Bootstrap 主题:
运行 python manage.py loaddata admin_interface_theme_bootstrap.json
Foundation 主题:
运行 python manage.py loaddata admin_interface_theme_foundation.json
U.S. Web Design Standards 主题:
运行 python manage.py loaddata admin_interface_theme_uswds.json
添加更多主题
您可以通过管理界面创建主题,并通过发送PR将其添加到此存储库。以下是添加主题的步骤:
-
使用
dumpdata
管理命令将您的主题导出为固定格式:python manage.py dumpdata admin_interface.Theme --indent 4 -o admin_interface_theme_{{name}}.json --pks=N
-
将生成的json文件复制到fixtures文件夹中(确保文件名以
admin_interface_theme_
开头,以避免与其他第三方应用程序可能提供的fixtures冲突)。 -
从fixture中删除
pk
,并确保active
字段设置为true
(这样安装时主题会自动激活)。 -
编辑上面的部分以记录您的主题。
为第三方库添加主题支持
您可以使用以下CSS变量为现有的第三方库添加主题支持:
页眉
--admin-interface-header-background-color
--admin-interface-header-text-color
--admin-interface-header-link-color
--admin-interface-header-link_hover-color
--admin-interface-title-color
--admin-interface-env-color
徽标
--admin-interface-logo-color
--admin-interface-logo-default-background-image
--admin-interface-logo-max-width
--admin-interface-logo-max-height
模块/链接
--admin-interface-module-background-color
--admin-interface-module-background-selected-color
--admin-interface-module-border-radius
--admin-interface-module-text-color
--admin-interface-module-link-color
--admin-interface-module-link-selected-color
--admin-interface-module-link-hover-color
--admin-interface-generic-link-color
--admin-interface-generic-link-hover-color
--admin-interface-generic-link-active-color
按钮
--admin-interface-save-button-background-color
--admin-interface-save-button-background-hover-color
--admin-interface-save-button-text-color
--admin-interface-delete-button-background-color
--admin-interface-delete-button-background-hover-color
--admin-interface-delete-button-text-color
相关模态框
--admin-interface-related-modal-background-color
--admin-interface-related-modal-background-opacity
--admin-interface-related-modal-border-radius
--admin-interface-related-modal-close-button-display
截图
管理员登录
管理员仪表板
管理员主题管理
管理员主题自定义
本地化
目前,该软件包已被翻译成以下语言:de
, es
, fa
, fr
, it
, pl
, pt_BR
, tr
。
翻译成其他语言
-
运行
python -m django makemessages --ignore ".tox" --ignore "venv" --add-location "file" --extension "html,py" --locale "it"
(以意大利语本地化为例) -
更新
admin_interface/locale/it/LC_MESSAGES/django.po
中的翻译 -
运行
python -m django compilemessages --ignore ".tox" --ignore "venv"
更新翻译
如果您对项目进行了一些更改,请记住更新翻译,因为如果翻译文件不是最新的,CI中的lint
步骤将失败:
- 运行
tox -e translations
缓存
该软件包使用缓存来改善主题加载时间和整体性能。
您可以使用settings.CACHES["admin_interface"]
设置自定义应用程序缓存选项,否则将使用"default"
缓存:
CACHES = {
# ...
"admin_interface": {
"BACKEND": "django.core.cache.backends.locmem.LocMemCache",
"TIMEOUT": 60 * 5,
},
# ...
}
[!警告] 当使用
django-redis
时,存在一个已知的兼容性问题,更具体地说,使用JSONSerializer
会引发以下错误:TypeError: Object of type Theme is not JSON serializable
,要缓解这个问题,只需为该应用程序使用一个不使用任何json
序列化器的特定缓存。
常见问题
自定义base-site.html
我已经有一个自定义的
base_site.html
,如何使其工作?
您可以使用django-apptemplates,然后在您的base_site.html
中添加{% extends "admin_interface:admin/base_site.html" %}
自定义LocaleMiddleware
警告
我正在使用
django.middleware.locale.LocaleMiddleware
的子类,但我看到一个不必要的警告,提示缺少django.middleware.locale.LocaleMiddleware
,我该怎么办?
您可以简单地忽略警告(这在这里已经讨论过)
import warnings
warnings.filterwarnings("ignore", module="admin_interface.templatetags.admin_interface_tags")
语言选择器不显示
我已启用了语言选择器,但它在管理界面中不可见,我该怎么办?
您必须正确配置多语言settings
和urls
:
LANGUAGES = (
("en", _("English")),
("it", _("Italiano")),
("fr", _("Français")),
# 这里需要多于一种语言
)
LANGUAGE_CODE = "en"
USE_I18N = True
MIDDLEWARE = [
# ...
"django.middleware.locale.LocaleMiddleware",
# ...
]
from django.conf.urls.i18n import i18n_patterns
from django.contrib import admin
from django.urls import include, path
# ...
urlpatterns = [
path("i18n/", include("django.conf.urls.i18n")),
]
urlpatterns += i18n_patterns(path("admin/", admin.site.urls))
在模态窗口中打开任何 URL
我的应用程序在管理界面中有一些交叉链接,我想在模态窗口而不是同一个/新窗口中打开它们,该怎么做?
你只需要在 URL 中添加 _popup=1
查询字符串参数:
url = reverse(f"admin:myapp_mymodel_change", args=[mymodel_instance.pk])
url = f"{url}?_popup=1"
测试
# 克隆仓库
git clone https://github.com/fabiocaccamo/django-admin-interface.git && cd django-admin-interface
# 创建虚拟环境并激活
python -m venv venv && . venv/bin/activate
# 升级 pip
python -m pip install --upgrade pip
# 安装依赖
pip install -r requirements.txt -r requirements-test.txt
# 安装 pre-commit 以运行格式化工具和 linter
pre-commit install --install-hooks
# 运行测试
tox
# 或
python runtests.py
# 或
python -m django test --settings "tests.settings"
贡献
我们始终欢迎贡献,请按照以下步骤提交高质量的 PR:
- :exclamation: 创建一个 issue,请不要提交任何未关联现有 issue 的 PR。
- :computer: 进行修改,修改最好有测试覆盖以避免将来出现回归。
- :globe_with_meridians: 更新翻译文件。
- :test_tube: 运行测试确保没有错误。
- :inbox_tray: 提交 pull request,只有在通过
CI
后才将其标记为**"可以审核"**。
许可证
基于 MIT 许可证 发布。
支持
- :star: 在 GitHub 上为这个项目点星
- :octocat: 在 GitHub 上关注我
- :blue_heart: 在 Twitter 上关注我
- :moneybag: 在 Github 上赞助我
另请参阅
-
django-cache-cleaner
- 使用管理面板或管理命令轻松清除整个缓存或单个缓存。🧹✨ -
django-colorfield
- 为模型提供简单的颜色字段,在管理界面中有一个漂亮的颜色选择器。🎨 -
django-extra-settings
- 只使用 django 管理界面配置和管理类型化的额外设置。⚙️ -
django-maintenance-mode
- 在维护模式开启时显示 503 错误页面。🚧 🛠️ -
django-redirects
- 完全可控的重定向。↪️ -
django-treenode
- 可能是你基于树结构的内容的最佳抽象模型/管理。🌳 -
python-benedict
- dict 子类,支持键列表/键路径,I/O 快捷方式(base64、csv、json、pickle、plist、query-string、toml、xml、yaml)和许多实用工具。📘 -
python-codicefiscale
- 编码/解码意大利税号 - 编码/解码意大利税号。🇮🇹 💳 -
python-fontbro
- 友好的字体操作。🧢 -
python-fsutil
- 为懒惰的开发者提供的文件系统实用工具。🧟♂️