📅  最后修改于: 2023-12-03 15:09:09.942000             🧑  作者: Mango
在 Django 管理后台中,我们可以非常方便地对数据库中的数据进行 CRUD 操作。但在默认情况下,Django 管理后台的文本显示可能无法满足我们的需求,比如显示中文时会出现乱码。
那么,如何更改 Django 管理后台的文本显示呢?下面我们将详细介绍几种常见的方法。
Django 中的每个模型都有一个默认的字符串表示方法 __str__
,在 Django 管理后台中,如果没有指定 list_display
,则默认显示的就是该模型的 __str__
方法返回的字符串。
因此,如果我们希望在 Django 管理后台中显示自定义的文本,只需要在模型中重载 __str__
方法即可。比如:
class User(models.Model):
name = models.CharField('姓名', max_length=50)
age = models.IntegerField('年龄')
def __str__(self):
return f'{self.name}({self.age})'
如果我们使用 Django 的 Admin 后台管理该模型,那么在列表中就会显示出类似 “张三(20)” 的文本。
在 Django 的模型中,如果没有指定 verbose_name
和 verbose_name_plural
,则 Django 会使用字段名作为默认值。如果我们使用中文字段名,那么就会出现中文乱码的情况。
因此,我们可以通过设置 verbose_name
和 verbose_name_plural
来解决这个问题。例如:
class User(models.Model):
name = models.CharField('姓名', max_length=50)
age = models.IntegerField('年龄')
class Meta:
verbose_name = '用户'
verbose_name_plural = '用户'
这样,在 Django 管理后台中就可以正常显示中文了。
有时候,我们需要在 Django 管理后台中显示的文本非常多,一个个手动设置 verbose_name
又很麻烦,这时我们可以使用 Django 自带的国际化工具 i18n 来自动化操作。
首先,在 settings.py
文件中设置语言:
# settings.py
LANGUAGES = [
('en-us', 'English'),
('zh-hans', '简体中文'),
]
LANGUAGE_CODE = 'zh-hans'
接下来,在模型中使用 ugettext
函数来设置字段名:
from django.utils.translation import ugettext_lazy as _
class User(models.Model):
name = models.CharField(_('姓名'), max_length=50)
age = models.IntegerField(_('年龄'))
这样,当我们访问 Django 管理后台时,系统会自动根据设置的语言来显示相应的文本。
通过以上三种方法,我们可以轻松地更改 Django 管理后台的文本显示,让它满足我们的需求。