解决Django的admin界面中文乱码
解决Django的admin界面中文乱码
问题陈述
最近在做一个很小的Django项目时,使用了自带的sqlite作为数据库。后台admin界面在显示中文数据时,总会遇到乱码。这里截取一小部分代码:
models.py文件
# _*_ coding:utf-8 _*_
from __future__ import unicode_literals
from django.db import models
from django.core.urlresolvers import reverse
# Create your models here.
class FatherMenu(models.Model):
title = models.CharField(u"菜单名", max_length=20)
slug = models.CharField(u"链接", max_length=100, db_index=True)
son = models.BooleanField("子菜单?", default=False)
class Meta:
verbose_name = u"一级菜单"
verbose_name_plural = u"一级菜单"
def __str__(self):
return self.title
导入数据data.json,例如:
[
{
"model":"seclab.FatherMenu",
"pk":1,
"fields":
{
"title":"首页",
"slug":"/",
"son":0
}
},
{
"model":"seclab.FatherMenu",
"pk":2,
"fields":
{
"title":"概况",
"slug":"/introduction/",
"son":0
}
},
{
"model":"seclab.FatherMenu",
"pk":3,
"fields":
{
"title":"动态",
"slug":"/dynamic/",
"son":1
}
}
]
from django.contrib import admin
# Register your models here.
from models import *
class FatherMenuAdmin(admin.ModelAdmin):
list_play = ('title', 'slug', 'son')
admin.site.register(FatherMenu, FatherMenuAdmin)
导入数据、创建superuser、运行server
python manage.py makemigrations
python manage.py migrate
python manage.py loaddata fatherMenu.json
python manage.py createsuperuser --username admin --email blank
python manage.py runserver 0.0.0.0:8080
登入到后台的admin界面,假设查看一级菜单->首页
,就会报错:
UnicodeEncodeError at /admin/seclab/fathermenu/1/change/
'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
Unicode error hint
The string that could not be encoded/decoded was: 首页
解决
试了几次发现,只要在models.py
中,每个__self__
函数返回的字段包含中文,就会在admin界面引发上述UnicodeEncodeError
。
具体到本例,__self__
函数返回了self.title
,表示菜单名,而导入数据时每个title
字段都是像首页、概况、动态这样的中文。
搜到了两种解决方法,可以任选一种:
1.用__unicode__
函数代替__str__
原先写的模型代码中的方法用提 def __str__(self):
这个是旧版本中用的方法,在Django 0.96以后的版本中,应该换成 def __unicode__(self):
, 这样就解决了字符串传递时出错的问题,统一编码为Unicode字符串。
class FatherMenu(models.Model):
···
def __unicode__(self):
return self.title
引自:Django报错UnicodeEncodeError: 'ascii' codec can't encode characters 之解决方法
2.使用sefdefaultencoding
函数
# _*_ coding:utf-8 _*_
from __future__ import unicode_literals
from django.db import models
from django.core.urlresolvers import reverse
# Create your models here.
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
class FatherMenu(models.Model):
···
引自:解决Python2.7的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误
解决Django的admin界面中文乱码的更多相关文章
- oracle安装界面中文乱码解决
在安装oracle时如果我们用的是英文安装没有任何问题,但是我要安装中文的,结果中文界面就出现了乱码了,后来网上找了原因是要安装中文包才可以,下面我来介绍一下. 在Linux的X window里安装o ...
- 解决Ubuntu 14下,PhpStorm 9.x 编辑器界面中文乱码的问题
在Ubuntu 14中,安装了 PhpStorm 9.02,发现 软件界面中文乱码,但是源码编辑处却显示正常,如下图所示: 很奇怪,猜想,应该是软件界面字体有问题,选了一个没有包含中文字体的字体.先前 ...
- 解决zabbix监控因php问题导致图形界面中文乱码方法
解决因编译php中添加了-enable-gd-jis-conv选项导致Zabbix监控系统图形界面中文乱码问题 现象: php编译参数: 说明: 如果PHP编译时启用–enable-gd-jis-co ...
- Django 连接mysql数据库中文乱码
Django 连接mysql数据库中文乱码 2018年08月25日 20:55:15 可乐乐乐乐乐 阅读数:566 版本:CentOS6.8 python3.6.4 django1.8.2 数据库 ...
- [django]Django站点admin支持中文显示和输入设置
正文: Django站点admin支持中文输入设置,操作如下: 1 需要确定的你的数据库的client客户端和服务端的编码设置为utf-8,如果不是,请将其设置成utf-8编码,我采用mysql,详情 ...
- Django之admin界面恢复及添加数据模型
引自:http://fl0wjacky.github.io/jekyll_demo/2014/07/14/Django-admin.html Django之admin界面恢复及添加数据模型 Djang ...
- 解决Linux文档显示中文乱码问题以及编码转换
解决Linux文档显示中文乱码问题以及编码转换 解决Linux文档显示中文乱码问题以及编码转换 使vi支持GBK编码 由于Windows下默认编码是GBK,而linux下的默认编码是UTF-8,所以打 ...
- 如何解决http请求返回结果中文乱码
如何解决http请求返回结果中文乱码 1.问题描述 http请求中,请求的结果集中包含中文,最终以乱码展示. 2.问题的本质 乱码的本质是服务端返回的字符集编码与客户端的编码方式不一致. 场景的如服务 ...
- Linux 解决Linux下火狐浏览器中文乱码成方块显示问题
解决Linux下火狐浏览器中文乱码成方块显示问题 by:授客 QQ:1033553122 测试环境: CentOS-6.0-x86_64 问题描述: 浏览器页面显示如下 解决方法: 安装中文支 ...
随机推荐
- 解决Android Studio报错:DefaultAndroidProject : Unsupported major.minor version 52.0
解决办法是你需要将工程根目录build.gradle中的 classpath 'com.android.tools.build:gradle:2.2.0' 更改成 classpath 'com.and ...
- Oracle 11g数据库安装与卸载的方法图解(windows)
一.Oracle 11g安装 安装之前要先确定自己的电脑配置,以windows为例,如果是win7以下系统如xp等,可以选择Oracle 10g.因为10g的程序文件只有200多兆,而11g及达到了2 ...
- laravel5.5事件广播系统实例laravel-echo + redis + socket.io
目录 1. 广播配置说明 1.1 广播驱动配置 1.2 注册服务提供器 2. 驱动器配置 2.1 安装predis 2.2. 配置服务端 2.2.1 安装方法 2.2.2 初始化服务端 2.2.3 运 ...
- [转]Android进程间通信--消息机制及IPC机制实现
Android为了屏蔽进程的概念,利用不同的组件[Activity.Service]来表示进程之间的通信! 组件间通信的核心机制是Intent,通过Intent可以开启一个Activity或Servi ...
- 《Cracking the Coding Interview》——第13章:C和C++——题目2
2014-04-25 19:29 题目:对比一下哈希表和STL中的map的区别,哈希表如何实现?如果数据规模比较小,可以用什么来代替哈希表? 解法:哈希表可以理解为一堆桶,每个桶都有唯一的id,桶里可 ...
- 《Cracking the Coding Interview》——第9章:递归和动态规划——题目11
2014-03-21 20:20 题目:给定一个只包含‘0’.‘1’.‘|’.‘&’.‘^’的布尔表达式,和一个期望的结果(0或者1).如果允许你用自由地给这个表达式加括号来控制运算的顺序,问 ...
- 遍历两个自定义列表来实现字典(key:value)
#自定义key ${keys} create list key1 key2 key3 #自定义value ${values} create list v ...
- Python 高级 I/O 多路复用
Table of Contents 前言 select selectors 结语 参考链接 前言 第一次接触和 I/O 多路复用相关的概念是在书 CSAPP1 的并发编程章节,当时在了解了这个概念后只 ...
- Python利器一之requests
Python利器一之requests 一.教程涉及开发语言.脚本.框架.数据库等内容 Python + requests 通过 pip 安装: pip install requests 通过 easy ...
- mac虚拟机上(centos系统)怎样实现共享本机文件
首先加载vboxadditions,可以从https://download.virtualbox.org/virtualbox/下载,记得一定要跟virtualBox版本对应 然后打开virtualb ...