2

我的模型中的某些字段(通过 mysql db)在访问时返回 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',我不想打印传真号码。我该怎么做呢?

背景:

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

4

2 回答 2

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

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

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

于 2013-08-05T02:17:37.137 回答
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

于 2013-08-05T02:21:48.880 回答