语言国际化
在代码中定义可翻译文本
from django.utils.translation import ugettext_lazy as _
print _(‘Hello World’)编辑.po翻译文件
django默认加载LOCALE_PATHS路径下的lang
/LC_MESSAGES/django.po文件,该文件主要有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实现,首先需创建apps.py文件,定义如下:
from django.apps 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 manage.py migrate
# 根据INSTALL_APPS和migrations创建或修改数据表
python manage.py makemigrations
# 每当数据模型改动时,运行该脚本,生成migrations
python manage.py sqlmigrate polls 0001
# 以sql语句的形式输出应用polls的0001号migrations
python manage.py check
在不生成migrations和访问数据库的情况下,检查数据模型
python manage.py shell
在当前project环境下作调试
时区设置
在项目配置文件settings.py中设置:
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 &
django.template.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(models.Manager):
def create_book(self, title):
book = self.create(title=title)
# do something with the book
return book
class Book(models.Model):
title = models.CharField(max_length=100)
objects = BookManager()
book = Book.objects.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 = {
models.TextField: {'widget': RichTextEditorWidget},
}
- 方法3: 在ModelAdmin自定义form变量, 然后重新声明对应ModelField使用的FormField类型, 方法如下:
class YourAdmin(admin.ModelAdmin):
form = YourForm
...
class YourForm(forms.ModelForm):
your_field = FormField(widget=your_widget_class)
...
# 或者使用以下方法
class YourForm(forms.ModelForm):
class Meta:
widgets = {
'your_field_name': your_widget_class()
}