我的模型中的某些字段(通过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以不同方式导出它,但它会让我感到复杂,我宁愿得到上面问题的答案。
答案 0 :(得分:1)
Django的模板认为unicode
是字符串;您不需要u
前缀。
您在导入时使用了错误的字符集;你需要先将字符集设置为UTF-16LE。
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
。