在django模板中处理u'\ x00'

时间:2013-08-05 01:45:22

标签: python django

我的模型中的某些字段(通过mysql数据库)在访问时返回u'\ x00',我想在django模板中检测到这一点。这就是我所看到的:

(Pdb) patient.address.fax
u'\x00'

我正在尝试在模板中执行以下操作...

{% if person.address.fax != u"\x00"  %}
   <abbr  class="icon-print" title = "Phone"> </abbr>  {{person.address.fax}} </br> 
{% endif %}

上面的模板代码出现以下错误:

Could not parse the remainder: '"\x00"' from 'u"\x00"'

基本上,如果person.address.fax = u'\ x00',我不想打印传真号码。我该怎么做?

背景

我使用bcp导出MSSQL数据库并将数据导入MySQL。当我在emacs中查看MSSQL中导出的数据时,我看到其中有一堆“^ @”(没有引号)。导入此文件后,我怀疑这个^ @显示为\ x00(一个NULL字符?)。可能有一些方法可以阻止MSSQL以不同方式导出它,但它会让我感到复杂,我宁愿得到上面问题的答案。

2 个答案:

答案 0 :(得分:1)

  1. Django的模板认为unicode是字符串;您不需要u前缀。

  2. 您在导入时使用了错误的字符集;你需要先将字符集设置为UTF-16LE。

  3. bcp“有帮助”输出NUL而不是CSV中的空字符串,原始字段为NULL;要么告诉bcp将其敲掉,要么执行UPDATE查询,将每个字段设置为NULL,等于'\0'

答案 1 :(得分:0)

您可以传递u'\x00'作为上下文变量进行比较,如

#!/usr/bin/env python2.7

from __future__ import print_function

from django.template import Template, Context
from django.conf import settings

settings.configure()

c = Context({'null': u'\x00', 'dbresult': u'\x00'})

t = Template(r"""
{% if dbresult == null %}
result is null
{% else %}
result is {{ dbresult }}
{% endif %}
""")

print(t.render(c))

正确打印result is null