Django - 如何在管理页面字段上显示科学计数法?
我在我的管理页面上有一个字段,我想把它显示成科学计数法。
现在它显示得很难看,比如这样。 我怎么才能把它显示成4.08E+13呢?
目前我在模型中使用的是标准的十进制字段。
任何建议都非常感谢。
我使用的是Django 1.2。
2 个回答
4
你需要使用 %e
来获取科学计数法的格式:
基本示例:
x = 374.534
print("%e" % x)
# 3.745340e+02
精度为2
x = 374.534
print("{0:.2E}".format(x))
# 3.75E+02
x = 12345678901234567890.534
print("{0:.2E}".format(x))
# 1.23E+19
精度为3
print("{0:.3E}".format(x))
# 1.235E+19
1
好吧,由于我不知道怎么在Django的Python代码里做到这一点,这里有个变通的方法。我让管理页面在加载后运行一些自定义的JavaScript来进行转换。
具体步骤:
首先,创建一个名为“decimal_to_sci_not.js”的JavaScript文件,并把它放在你的媒体目录里:
/*
Finds and converts decimal fields > N into scientific notation.
*/
THRESHOLD = 100000;
PRECISION = 3;
function convert(val) {
// ex. 100000 -> 1.00e+5
return parseFloat(val).toPrecision(PRECISION);
}
function convert_input_fields() {
var f_inputs = django.jQuery('input');
f_inputs.each(function (index, domEl) {
var jEl = django.jQuery(this);
var old_val = parseFloat(jEl.val());
if (old_val >= THRESHOLD) {
jEl.val(convert(old_val));
}
});
}
function convert_table_cells() {
//Look through all td elements and replace the first n.n number found inside
//if greater than or equal to THRESHOLD
var cells = django.jQuery('td');
var re_num = /\d+\.\d+/m; //match any numbers w decimal
cells.each(function (index, domEl) {
var jEl = django.jQuery(this);
var old_val_str = jEl.html().match(re_num);
var old_val = parseFloat(old_val_str);
if (old_val >= THRESHOLD) {
jEl.html(jEl.html().replace(old_val_str,convert(old_val)));
}
});
}
django.jQuery(document).ready( function () {
convert_input_fields();
convert_table_cells();
});
然后,更新你的admin.py代码类,把这个JavaScript文件包含进去:
class MyModel1Admin(admin.ModelAdmin):
class Media:
js = ['/media/decimal_to_sci_not.js']
admin.site.register(MyModel1,MyModel1Admin)