语言国际化
在代码中定义可翻译文本
from import ugettext_lazy as _
print _(‘Hello World’)编辑.po翻译文件
django默认加载LOCALE_PATHS路径下的lang
/LC_MESSAGES/文件,该文件主要有msgid与msgstr键值对构成。对于中文,文件需包括以下文件头:
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
定义APP在admin接口的显示名称
可通过设置AppConfig的verbose_name实现,首先需创建文件,定义如下:
from import AppConfig
class MyConfig(AppConfig):
name = 'your name'
verbose_name = 'your display name'
然后可以项目配置文件的INSTALL_APPS项中,把your app
改为your app
.MyConfig,或者在你的app的init.py定义default_app_config = ‘your app
.MyConfig’
数据库操作
python migrate
# 根据INSTALL_APPS和migrations创建或修改数据表 python makemigrations
# 每当数据模型改动时,运行该脚本,生成migrations python sqlmigrate polls 0001
# 以sql语句的形式输出应用polls的0001号migrations python check
在不生成migrations和访问数据库的情况下,检查数据模型 python shell
在当前project环境下作调试
时区设置
在项目配置文件中设置:
USE_TZ = True
TIME_ZONE = 'Asia/Shanghai'
在MySQL数据库机器上执行以下命令,在mysql数据库上加载时区信息:
mysql_tzinfo_to_sql /usr/share/zoneinfo/ |mysql -h 192.168.1.201 -u root -P 6033 -p mysql
注意 时区信息在整个Server上生效,而不是针对某个数据库
加载完后,需要重新启动MySQL才能生效
mysqladmin -h 192.168.1.201 -u root -P 6033 -p shutdown
mysqld_safe --defaults-file=/etc/mysql/my_all.cnf &
.context_processors说明
名称 | 字段 | 说明 | 字段 | 说明 | 字段 | 说明 |
---|---|---|---|---|---|---|
csrf | csrf_token | 抵制跨站攻击token | ||||
debug | debug | True | sql_queries | sql查询语句 | ||
i18n | LANGUAGES | 可用语言 | LANGUAGE_CODE | 当前语言编码 | LANGUAGE_BIDI | |
tz | TIME_ZONE | 时区 | ||||
static | STATIC_URL | 静态文件url | ||||
media | MEDIA_URL | media相关内容url | ||||
request | request | 当前请求对象 |
知识点
给ModelManager添加自定义方法
class BookManager():
def create_book(self, title):
book = (title=title)
# do something with the book
return book
class Book():
title = (max_length=100)
objects = BookManager()
book = .create_book("Pride and Prejudice")
自定义Admin的change_form页面
在外键显示域不显示’—–’选项
重写formfield_for_foreignkey函数,定义empty_label=None
自定义ModelField默认的widget
- 方法1: 在ModelAdmin中重写formfield_for_dbfield函数, 定义kwargs[‘widget’]变量;
- 方法2: 在ModelAdmin中定义formfield_overrides变量, 但此种方法会改变所有同种类型ModelField使用的widget, 方法如下:
formfield_overrides = {
: {'widget': RichTextEditorWidget},
} - 方法3: 在ModelAdmin自定义form变量, 然后重新声明对应ModelField使用的FormField类型, 方法如下:
class YourAdmin():
form = YourForm
...
class YourForm():
your_field = FormField(widget=your_widget_class)
...
# 或者使用以下方法
class YourForm():
class Meta:
widgets = {
'your_field_name': your_widget_class()
}