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的Django框架中simple-todo工具的简单使用
May 30 Python
Python中的anydbm模版和shelve模版使用指南
Jul 09 Python
Python实现的文本简单可逆加密算法示例
May 18 Python
20个常用Python运维库和模块
Feb 12 Python
Python实现时钟显示效果思路详解
Apr 11 Python
Django rest framework工具包简单用法示例
Jul 20 Python
详解python列表生成式和列表生成式器区别
Mar 27 Python
python中的decimal类型转换实例详解
Jun 26 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
Feb 26 Python
使用python无账号无限制获取企查查信息的实例代码
Apr 17 Python
python学习将数据写入文件并保存方法
Jun 07 Python
python疲劳驾驶困倦低头检测功能的实现
Apr 04 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
晶体管来复再生式二管收音机
2021/03/02 无线电
php ss7.5的数据调用 (笔记)
2010/03/08 PHP
浅析十款PHP开发框架的对比
2013/07/05 PHP
关于PHP内置的字符串处理函数详解
2017/02/04 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
javascript Xml增删改查(IE下)操作实现代码
2009/01/30 Javascript
Javascript验证上传图片大小[前台处理]
2014/07/18 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
js严格模式总结(分享)
2016/08/22 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
Ajax跨域实现代码(后台jsp)
2017/01/21 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
2017/08/15 Javascript
JS匿名函数内部this指向问题详析
2019/05/10 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
24个解决实际问题的ES6代码片段(小结)
2020/02/02 Javascript
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
Python 26进制计算实现方法
2015/05/28 Python
Python实现简单的多任务mysql转xml的方法
2017/02/08 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
python 剪切移动文件的实现代码
2018/08/02 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
python实现提取str字符串/json中多级目录下的某个值
2020/02/27 Python
用python实现名片管理系统
2020/06/18 Python
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
如何查看在weblogic中已经发布的EJB
2012/06/01 面试题
完美主义个人的自我评价
2014/02/17 职场文书
临时用工协议书范本
2014/10/29 职场文书
2014年机关后勤工作总结
2014/12/16 职场文书
表扬信范文
2019/04/22 职场文书
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python