Django Admin部分RTL语言自动适配异常问题求助
Django Admin 非内置RTL语言无法自动切换布局的问题解决
问题原因
Django Admin模板会自动检测当前语言的书写方向(Bi-directional),如果语言被标记为RTL(从右到左),就会加载对应的RTL样式文件。但Django的内置语言注册表中,仅为阿拉伯语(ar)、波斯语(fa)等常见RTL语言设置了bidirectional=True属性,像库尔德语(ku)这类未被内置标记的RTL语言,Django无法自动识别其书写方向,因此保持LTR布局。
解决方法
方法1:注册自定义语言的书写方向
在项目的settings.py中,通过django.utils.translation.trans_real模块注册库尔德语的RTL属性:
from django.utils.translation.trans_real import register # 注册库尔德语为RTL语言 register('ku', 'Kurdish', bidirectional=True) # 原有的配置保持不变 LANGUAGE_CODE = 'en-us' USE_I18N = True USE_L10N = True TIME_ZONE = 'UTC' USE_TZ = True LANGUAGES = ( ('en', _('English')), ('ku', _('Kurdish')), ('fa', _('Persian')), ) LOCALE_PATHS = [ Path(BASE_DIR, 'django_i18n', 'locale'), ]
这段代码会告诉Django,库尔德语是RTL语言,Admin模板会自动加载RTL样式。
方法2:自定义Admin模板加载RTL样式
如果不想修改语言注册逻辑,可以通过自定义Admin的基础模板来手动判断语言并加载RTL样式:
- 在项目中创建
templates/admin/base.html文件(继承Django原Admin模板):
{% extends "admin/base.html" %} {% block extrahead %} {{ block.super }} {% if request.LANGUAGE_CODE == 'ku' %} <link rel="stylesheet" type="text/css" href="{% static 'admin/css/rtl.css' %}"> {% endif %} {% endblock %}
- 确保项目的
TEMPLATES配置中包含自定义模板目录:
# settings.py 中添加模板路径 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [Path(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
这种方式直接针对特定语言手动加载RTL样式,适合仅需支持少数非内置RTL语言的场景。
方法3:修改Django内置语言文件(不推荐)
可以直接修改Django源码中的django/conf/locale/__init__.py文件,在LANG_INFO字典中添加库尔德语的配置:
# 找到LANG_INFO字典,添加如下内容 'ku': { 'bidi': True, 'code': 'ku', 'name': 'Kurdish', 'name_local': 'Kurdî', },
但这种方法需要修改Django源码,后续升级Django时会丢失修改,因此不推荐使用。
内容的提问来源于stack exchange,提问作者jasherawe
相关产品推荐
相关产品推荐

