语言国际化
在代码中定义可翻译文本
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()
}
本文详细介绍了Django项目的语言国际化设置,包括如何在代码中定义可翻译文本和编辑翻译文件。此外,还讲解了如何自定义APP在admin接口的显示名称,数据库操作如创建或修改数据表,以及时区设置。同时,深入探讨了Django的template.context_processors,并分享了在ModelManager中添加自定义方法和自定义Admin的change_form页面的技巧,包括如何在外键显示域不显示默认选项和自定义ModelField的widget。
863

被折叠的 条评论
为什么被折叠?



