经过几个月的网络开发后,我发现自己完全无助于尝试找到一个很好的解决方案来解决格式化整个DOM中所有数字的简单问题。具体来说,我有一个js函数 my_int_formatter (),我想在加载文档后应用于所有整数。以示例描述的最佳 - 我想做类似
的事情<td>my_int_formatter({{django_variable}})</td>
我知道上面的代码不会起作用,因为我必须包含&#39;脚本&#39;标签,但首先,我不喜欢凌乱的代码,其次,javascript无法识别python变量
我尝试了以下方式:
HTML
<td class = 'my_integer'>{{django_variable}}</td>
JS
$(document).ready(function(){
// ....
content = $('.my_integer').html();
$('.my_integer').html(my_int_formatter(content));
...但正如预期的那样,我得到了错误的结果,因为js代码将DOM链中第一个.my_integer元素的相同html()内容应用于所有其他元素。任何想法如何做到这一点的短而正确的方法?
答案 0 :(得分:2)
如果我理解正确,您的问题不在于格式化,而是实际上将格式应用于每个dom元素。
尝试使用jquerys .each()函数并使用$(this).html()来实际抓取内容。
$('.my_integer').each(function(){
content = $(this).html();
$(this).html(content+"formatted");
});
这是一个快速的小提琴:
答案 1 :(得分:1)
如果我理解正确,您想使用内置django.contrib.humanize
应用程序:https://docs.djangoproject.com/en/1.9/ref/contrib/humanize/
您可以使用某些预定义过滤器格式化整数,例如intcomma
:
4500 becomes 4,500.
45000 becomes 45,000.
450000 becomes 450,000.
4500000 becomes 4,500,000.
您的情况下的用法就像
{% load humanize %}
<td>{{django_variable|intcomma}}</td>
另外,请不要忘记在INSTALLED_APPS
同样this问题也许有用
如果您想对所有类型的变量应用过滤器,建议您在渲染之前使用Middleware来调整响应。