django学习

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

语言国际化

  1. 在代码中定义可翻译文本
    from django.utils.translation import ugettext_lazy as _
    print _(‘Hello World’)

  2. 编辑.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说明

名称字段说明字段说明字段说明
csrfcsrf_token抵制跨站攻击token
debugdebugTruesql_queriessql查询语句
i18nLANGUAGES可用语言LANGUAGE_CODE当前语言编码LANGUAGE_BIDI
tzTIME_ZONE时区
staticSTATIC_URL静态文件url
mediaMEDIA_URLmedia相关内容url
requestrequest当前请求对象

知识点

给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()
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值