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中的闭包实例详解
Aug 29 Python
Python利用ansible分发处理任务
Aug 04 Python
Python中Class类用法实例分析
Nov 12 Python
Python2.X/Python3.X中urllib库区别讲解
Dec 19 Python
django manage.py扩展自定义命令方法
May 27 Python
python消费kafka数据批量插入到es的方法
Dec 27 Python
Django CSRF跨站请求伪造防护过程解析
Jul 31 Python
Python面向对象原理与基础语法详解
Jan 02 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
Mar 12 Python
python subprocess pipe 实时输出日志的操作
Dec 05 Python
python实现KNN近邻算法
Dec 30 Python
pandas中关于apply+lambda的应用
Feb 28 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
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
2017/06/02 PHP
php读取本地json文件的实例
2018/03/07 PHP
基于php+MySql实现学生信息管理系统实例
2020/08/04 PHP
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
JS+CSS实现一个气泡提示框
2013/08/18 Javascript
easyui-combobox 实现简单的自动补全功能示例
2016/11/08 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
vue计算属性computed的使用方法示例
2019/03/13 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
微信小程序indexOf的替换方法(推荐)
2020/01/14 Javascript
JS监听组合按键思路及实现过程
2020/04/17 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
[04:17]DOTA2完美盛典,rOtk、BurNIng携手巴图演唱《倔强》
2017/11/28 DOTA
python海龟绘图实例教程
2014/07/24 Python
在Python的Django框架中simple-todo工具的简单使用
2015/05/30 Python
python中的错误处理
2016/04/10 Python
利用Python读取文件的四种不同方法比对
2017/05/18 Python
Python实现PS滤镜的万花筒效果示例
2018/01/23 Python
一百多行python代码实现抢票助手
2018/09/25 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
Django 开发环境与生产环境的区分详解
2019/07/26 Python
纯CSS3代码实现switch滑动开关按钮效果
2016/08/30 HTML / CSS
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
数据库笔试题
2013/05/09 面试题
房地产管理毕业生自荐信
2013/11/04 职场文书
小学运动会表扬稿
2014/01/19 职场文书
班级年度安全计划书
2014/05/01 职场文书
出生医学证明书
2014/09/15 职场文书
身份证丢失证明
2015/06/19 职场文书