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实现图像几何变换
Jul 06 Python
Python中的CSV文件使用"with"语句的方式详解
Oct 16 Python
python创建文件时去掉非法字符的方法
Oct 31 Python
python使用knn实现特征向量分类
Dec 26 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
Aug 05 Python
Django项目主urls导入应用中views的红线问题解决
Aug 10 Python
django中使用事务及接入支付宝支付功能
Sep 15 Python
在Python中用GDAL实现矢量对栅格的切割实例
Mar 11 Python
Keras之fit_generator与train_on_batch用法
Jun 17 Python
基于K.image_data_format() == 'channels_first' 的理解
Jun 29 Python
python如何导入依赖包
Jul 13 Python
python 下载m3u8视频的示例代码
Nov 11 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 中文和编码判断代码
2010/05/16 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
PHPStorm 2020.1 调试 Nodejs的多种方法详解
2020/09/17 NodeJs
javascript SocialHistory 检查访问者是否访问过某站点
2008/08/02 Javascript
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
2011/07/08 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
2011/11/09 Javascript
javascript遍历控件实例详细解析
2014/01/10 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
Angular 根据 service 的状态更新 directive
2016/04/03 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
jQuery代码实现表格中点击相应行变色功能
2016/05/09 Javascript
JavaScript中绑定事件的三种方式及去除绑定
2016/11/05 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
利用VS Code开发你的第一个AngularJS 2应用程序
2017/12/15 Javascript
如何优雅地在Node应用中进行错误异常处理
2019/11/25 Javascript
vue实现短信验证码登录功能(流程详解)
2019/12/10 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
浅谈Pandas中map, applymap and apply的区别
2018/04/10 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
pygame实现俄罗斯方块游戏(基础篇1)
2019/10/29 Python
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
中东奢侈品市场:Coveti
2019/05/12 全球购物
《雨点》教学反思
2014/02/12 职场文书
国际金融专业自荐信
2014/07/05 职场文书
中小学生学籍证明
2014/10/25 职场文书
网站文案策划岗位职责
2015/04/14 职场文书
2016大学生就业指导课心得体会
2016/01/15 职场文书
《假如》教学反思
2016/02/17 职场文书
《自然之道》读后感3篇
2019/12/17 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书