Django admin model 汉化显示文字的实现方法


Posted in Python onAugust 12, 2019

1、将添加blog的后台基本操作

在blog文件夹下新建一个admin.py文件加入一下代码:

from django.contrib import admin 
from djcms.apps.blog.models import Post, Category, Tag 
 
admin.site.register(Post) 
admin.site.register(Category) 
admin.site.register(Tag)

重启服务,再到浏览器上登录到后台,是不是增加了对blog的基本操作,不仅比较完善、界面整洁优雅,而且很多都可以自定义,是不是很酷!后续再慢慢研究。

2、汉化表单、完善表单

目前位置,后台的表单前面的标签label基本上都是默认的字段名字,各种表单也是初始的状态,下面我们简单做些修改。修改后的模型代码如下:

# coding:utf8
from django.db import models 
 
class Category(models.Model): 
 """ 
 文章分类
 """ 
 title = models.CharField('名称', max_length=100)  # 分类名称 
 alias = models.CharField('别名', max_length=100)  # 分类别名(用于 url 优化) 
 sort = models.SmallIntegerField('排序')     # 排序 
 
 class Meta: 
  verbose_name = '分类' 
  verbose_name_plural = '分类' 
  ordering = ['sort'] 
 
 def __unicode__(self): 
  return self.title 
 
class Tag(models.Model): 
 """ 
 文章标签
 """ 
 tagname = models.CharField('标签名', max_length=60)  # 标签名 
 post_ids = models.TextField(editable=False)    # 对应的文章 id 集合的序列 
 
 class Meta: 
  verbose_name = '标签' 
  verbose_name_plural = '标签' 
 
 def __unicode__(self): 
  return self.tagname 
 
class Post(models.Model): 
 """ 
 博客文章
 """ 
 # 文章发布状态 
 CONTENT_STATUS_PUBLISHED = 1 
 # 文章草稿箱状态 
 CONTENT_STATUS_DRAFT = 2 
 # 文章状态选项 
 CONTENT_STATUS_CHOICES = ( 
  (CONTENT_STATUS_PUBLISHED, '发布'), 
  (CONTENT_STATUS_DRAFT, '草稿箱'), 
 ) 
 
 title = models.CharField('标题', max_length=100)     # 标题 
 content = models.TextField('文章内容')        # 内容 
 excerpt = models.TextField('摘要')         # 摘要 
 publish_date = models.DateTimeField('发表时间')      # 发表时间 
 status = models.IntegerField('状态', 
         choices=CONTENT_STATUS_CHOICES, 
         default=CONTENT_STATUS_PUBLISHED)  # 状态:1为正式发布,2为草稿箱 
 comments_count = models.IntegerField(default=0, editable=False)  # 评论总数 
 view_count = models.IntegerField(default=0, editable=False)   # 浏览总数 
 
 alias = models.CharField('别名', max_length=100, blank=True)  # 别名(用于 url 优化) 
 keywords = models.CharField('关键字', max_length=500, blank=True) # 关键字 
 description = models.TextField('描述', blank=True)     # 描述 
 
 user = models.ForeignKey("auth.User", 
        verbose_name = '作者', 
        related_name="%(class)ss")     # 作者 
 categories = models.ManyToManyField(Category, blank=True, 
          verbose_name = '分类', 
          related_name="posts")   # 分类 
 
 class Meta: 
  verbose_name = '文章' 
  verbose_name_plural = '文章' 
  ordering = ['publish_date'] 
 
 def __unicode__(self): 
  return self.title

其中将文章状态选项CONTENT_STATUS_CHOICES 写在Post类中更加合理,而Meta中的verbose_name表示单数形式的显示,verbose_name_plural表示复数形式的显示,因为中文的单数和复数一般不作区别,如果是英文一般默认会的复数是加上了s

进一步完善文章的列表显示和表单,在blog下面的admin.py文件中加入PostAdmin类:

class PostAdmin(admin.ModelAdmin):
 list_display = ('title', 'publish_date', 'user', 'status')  # 列表显示的字段
 search_fields = ('title',)          # 列表包含根据指定字段搜索
 list_filter = ('publish_date',)         # 右侧过滤选项
 
 # 分组表单
 fieldsets = (
  ('基本信息', {'fields': ('title', 'content', 'excerpt', 'publish_date','status', 'user', 'categories')}),
  ('Meta Data', {'fields': ('alias', 'keywords', 'description')}),
 )

注意,有3种类型的域不能按如上方式添加自定义名称:ManyToManyField,OneToOneField,ForeignKey。而应该显示指定:

class Film(models.Model):
 title = models.CharField('片名', max_length=100)
 actors = models.ManyToManyField(Actor,verbose_name='演员')
 pub_date = models.DateField('发行日期')
 publisher = models.ForeignKey(Publisher,verbose_name='发行商')

如果想修改通过admin自动生成的后台管理标题 请用国际化处理, 如果改变布局可以重写admin的页面

以上这篇Django admin model 汉化显示文字的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python通过ElementTree操作XML获取结点读取属性美化XML
Dec 02 Python
Python遍历文件夹和读写文件的实现方法
May 10 Python
python3.6的venv模块使用详解
Aug 01 Python
pandas数据筛选和csv操作的实现方法
Jul 02 Python
django页面跳转问题及注意事项
Jul 18 Python
Python facenet进行人脸识别测试过程解析
Aug 16 Python
使用python实现回文数的四种方法小结
Nov 24 Python
关于Python3 lambda函数的深入浅出
Nov 27 Python
Python tkinter布局与按钮间距设置方式
Mar 04 Python
OpenCV 之按位运算举例解析
Jun 19 Python
python中的对数log函数表示及用法
Dec 09 Python
Python 2.6.6升级到Python2.7.15的详细步骤
Dec 14 Python
Python简易版图书管理系统
Aug 12 #Python
django drf框架中的user验证以及JWT拓展的介绍
Aug 12 #Python
python中eval与int的区别浅析
Aug 11 #Python
将Python文件打包成.EXE可执行文件的方法
Aug 11 #Python
python多线程同步实例教程
Aug 11 #Python
pandas的to_datetime时间转换使用及学习心得
Aug 11 #Python
python中时间转换datetime和pd.to_datetime详析
Aug 11 #Python
You might like
使用php+Ajax实现唯一校验实现代码[简单应用]
2011/11/29 PHP
yii上传文件或图片实例
2014/04/01 PHP
php实现上传图片文件代码
2015/07/19 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
Javascript 中的类和闭包
2010/01/08 Javascript
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
Jquery焦点图实例代码
2014/11/25 Javascript
jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
2015/12/08 Javascript
js select下拉联动 更具级联性!
2020/04/17 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
2017/06/20 Javascript
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
nodejs dgram模块广播+组播的实现示例
2019/11/04 NodeJs
vue element-ui实现动态面包屑导航
2019/12/23 Javascript
Python实现FTP上传文件或文件夹实例(递归)
2017/01/16 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
2019/04/11 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
2019/07/19 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
Footshop法国:购买运动鞋
2020/01/19 全球购物
某个公司的Java笔面试题
2016/03/11 面试题
阿尔卡特(中国)的面试题目
2014/08/20 面试题
大学生怎样进行自我评价
2013/12/07 职场文书
完美主义个人的自我评价
2014/02/17 职场文书
财务情况说明书范文
2014/05/06 职场文书
企业安全生产承诺书
2014/05/22 职场文书
教师三严三实学习心得体会
2014/10/11 职场文书
整改报告格式
2014/11/06 职场文书
罗马假日观后感
2015/06/08 职场文书
网吧员工管理制度
2015/08/05 职场文书
详解Flask开发技巧之异常处理
2021/06/15 Python
jdbc中自带MySQL 连接池实践示例
2022/07/23 MySQL