【问题标题】:Django template parses string as integerDjango模板将字符串解析为整数
【发布时间】:2013-07-09 17:28:51
【问题描述】:

我有一个如下所示的列表:

[(2,'09-07-2014')]

当我在客户端访问此列表时,我可以使用:

{% for item in list %}
console.log( {{ item.0 }} + ' and ' + {{ item.1 }} )
{% endfor %}

问题是 item.0 返回 2 应该如此,但 item.1 返回 -2012 因为整数表示中的 9-7-2014 将计算为 -2012

如何让客户端脚本意识到这是一个字符串而不是整数。

下面是完整的代码清单:

chartdata= getChartData(request.session['userphone'])
log.debug(chartdata)
return render(request,'users.html',{'table':table,'topics':request.session['topics'],'profilepic':request.session['profilepic'],'chartdata':chartdata,'time':str(time.time())})

log.debug(chartdata) 在我的日志文件中返回以下内容:

[11/Jul/2013 18:02:15] DEBUG [karnadash.views:179] [(85, '2013-07-08'), (120, '2013-07-08'), (205, '2013-07-08'), (305, '2013-07-08'), (405, '2013-07-08'), (505, '2013-07-08'), (547, '2013-07-09'), (564, '2013-07-09'), (581, '2013-07-09'), (607, '2013-07-09'), (624, '2013-07-09'), (659, '2013-07-09'), (694, '2013-07-09'), (711, '2013-07-09'), (737, '2013-07-09'), (754, '2013-07-09'), (771, '2013-07-09'), (871, '2013-07-09')]

【问题讨论】:

  • 据我所知,在这种情况下,Django 不会尝试将该字符串解释为整数。无论如何,这从未发生在我身上。这种解释可能发生在其他地方。尽管您的任务中没有涉及 JS,但您已将其标记为“javascript”,因此我指指点点。 ;-)
  • 我会按照我的日志文件中显示的完全相同的方式向您显示我的数据。
  • 我不怀疑您的日志文件显示-2012。我怀疑上面的代码是否会发生这种情况。它必须发生在之前。在这种情况下,Python 会很高兴地从整数中生成字符串。但它不会从字符串中生成整数,尤其是字符串 '09-07-2014',它在 Python 眼中是一个无效的整数。
  • console.log 调用将您的值转换为 int。您必须先将其转换为字符串 (String({{ obj }}))。如果您只是在模板中输入{{ item.1 }},它会正确显示
  • 那是因为我的js技术太差了。 '{{ item.1 }}' 足以告诉 js 它正在处理一个字符串

标签: javascript python django django-templates


【解决方案1】:

Django 没有这样做,Javascript 是,因为你没有告诉 JS 你正在处理一个字符串。如果您要查看 HTML 源代码,您会确切地看到正在发生的事情 - 它看起来像这样:

console.log( 2 + ' and ' + 09-07-2014 )

日期值周围没有任何引号,因为你没有放任何引号,所以 JS 认为它是一个表达式。很容易解决:

console.log( '{{ item.0 }}' + ' and ' + '{{ item.1 }}' )

或者,甚至更好,因为 JS 不关心它们在 Django 中是单独的项目这一事实:

console.log( '{{ item.0 }} and {{ item.1 }}' )

【讨论】:

  • 哦。完美运行!谢谢。不知道为什么我没有想到模板在 js 启动之前得到解析的事实。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 2010-10-16
相关资源
最近更新 更多