2016-07-07 72 views
1

经过数月的网络开发之后,我发现自己完全无奈,试图找到一个很好的解决方案,以便按照我的意愿对整个DOM中的所有数字进行格式化。具体来说,我有一个js函数my_int_formatter(),我想在文档加载后应用于所有整数。举例最佳descriped - 我要像做在整个文档中格式化整数千位分隔符

<td>my_int_formatter({{django_variable}})</td> 

我知道上面的代码将无法正常工作,因为我必须包括“脚本”的标签,但首先,我不喜欢的乱码,第二,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()内容应用于所有其他元素。任何想法如何做到这一点简短而正确的方式?

回答

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来拨弄响应。

+0

太棒了!我再次低估Django并寻找解决方案客户端,这就是为什么你提到的问题逃脱我的通知)) –

+0

有什么办法可以告诉Django将这种格式应用于所有整数,除非另有明确规定? –

+1

@Edgar Navasardyan我建议使用中间件。查看文档链接回复更新 – valignatev

2

如果我理解正确,你的问题不是格式化,而是将格式应用到你的每个dom元素。

尝试使用jquerys .each()函数并使用$(this).html()来实际获取内容。

$('.my_integer').each(function(){ 
    content = $(this).html(); 
    $(this).html(content+"formatted"); 
}); 

这里有一个快速的小提琴:

https://jsfiddle.net/57rdq2a0/2/

+0

Starbug,我已经将valentjedi的答案打勾为解决方案,因为使用他的方法,您不必遍历整个DOM。我想知道,如果你有大型网站 –

+1

是的,我注意到他的回复之后,这样循环有多昂贵。操纵服务器端更好(我已经nerer真的触及Django所以不能帮助)。 jquery的each()可能在大型网站上很沉重,这就是为什么在JS中搜索fo ID而不是JS的类更好。祝你好运^^ – StarbugStone

+0

明白了,谢谢) –

相关问题