Diango开发中的细节
数据库操作:
1. TEMPLATE_CONTEXT_PROCESSORS 加入django.core.context_processors.i18n
2. MIDDLEWARE_CLASSES中加入django.middleware.locale.LocaleMiddleware,注意:它要放在SessionMiddleware和CacheMiddleware的后面,其他中间件的前面
3. LANGUAGE_CODE 设置缺省的网站语言,如 en, zh-cn,it
, de-at
, es
, pt-br
4. LANGUAGES设置网站所支持的所有语言,如(('en', u'English'),('zh-cn',u'中文'))
5. USE_I18N 设置为True
6.LANGUAGE_COOKIE_NAME设置cookie中的name
7.
{% blocktrans %}This string will have {{ value }} inside.{% endblocktrans %}
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传值,提交的是数组即可