Posted by:
努力记

努力记,通过记录,计划,让自己的努力可以触碰彩虹!

2,673

Diango开发中的细节

  • 2014-10-31
  • 暂无评论

数据库操作:

Django中默认可以通过syncdb完成模型的新建工作
但对于模型的修改及删除则没有提供工具实现
south则是第三方数据库迁移工具:
1.将South添加到install_app中
2.manage.py syncdb来生成south的数据表
3.manage.py convert_to_south appname初始化app的迁移数据
4.manage.py schemamigration appname --auto(自动检测对models的更改)
    如果第一次使用,--initial
    manage.py syncdb
5.manage.py migrate appname 将更改提交到数据库(如果出现表存在错误,则添加--fake)

本地化翻译操作
settting中的设置:

1. TEMPLATE_CONTEXT_PROCESSORS 加入django.core.context_processors.i18n

2. MIDDLEWARE_CLASSES中加入django.middleware.locale.LocaleMiddleware,注意:它要放在SessionMiddleware和CacheMiddleware的后面,其他中间件的前面

3. LANGUAGE_CODE 设置缺省的网站语言,如 en, zh-cn,itde-atespt-br

4. LANGUAGES设置网站所支持的所有语言,如(('en', u'English'),('zh-cn',u'中文'))

5. USE_I18N 设置为True

6.LANGUAGE_COOKIE_NAME设置cookie中的name

7.

在代码中添加:
from django.utils.translation import ugettext_lazy as _
使用
_('')即可
在模版中添加:
{% load i18n %}
使用:
{% trans "xxxx" %}

{% blocktrans %}This string will have {{ value }} inside.{% endblocktrans %}

生成po的资源文件
manage.py makemessages -a
注:windows下需要安装xgettext

makemessages 需要调用工具xgettext, Windows没有,可下载gettext, 要下两个文件gettext-runtime-X.zip 和 gettext-tools-X.zip

放置在python目录中

 

生成mo文件

mange.py compilemessages

 

使用ugetext不会进行翻译,在makemessages脚本中未对ugettext等直接翻译的函数进行关键词处理

但json等格式无法在延迟翻译的情况下进行序列化操作

所以只能用替代方案:uncode(ugettext_layz(''))

 

对于翻译模糊的词,会在po文件中显示为fuzzy,对于该标签则不会翻译到mo文件中,需要手动清除

 

应对多个表外键的方式

在mysql一般是建立2个字段,model和model_pk

django中提供一个统一的管理方式处理该类问题

 

content_type = models.ForeignKey(ContentType, blank=True, null=True)

object_id = models.PositiveIntegerField(default=0)

content_object = generic.GenericForeignKey(ct_field="content_type", fk_field="object_pk")

 

在操作模型的时候可以直接传递content_object=object的方式查询关联数据

 

request对象的http头判断:

request.META中存放着当次请求的头信息

例如:在jquery中添加

$.ajax({

headers:{

    'X-PJAX':true

}

});

在django中得判断

try:

    pjax = request.META['HTTP_X_PJAX']

    return True if pjax else False

except:

    return False

1.要先添加HTTP前缀

2.在将连接符换成下划线

 

获取复选框的值

request.POST.get()可以获取到表单值

request.POST.getlist('id[]')可以获取到name为id的列表,如果是ajax传值,提交的是数组即可



back up ↑

无觅相关文章插件,快速提升流量