2016-01-19 20 views
3

我有在Python dict是类似以下内容:确定如果我需要在HTML引号和Django模板

d = {'key1': .98, 'key2': 'some_str', 
    #... 
    } 

在本词典中的某些键将被映射到float和其他人将被映射到str

在我的HTML我做类似如下:

html_dict = { 
{% for k, v in my_dict.items %} 
    {{ k }}: "{{ v }}", 
{% endfor %} 
}; 

但是这种做法包裹也引用了引号,这是我不想要的。但是如果我不知道用引号将它们包装起来,那么HTML就不会理解它们是字符串值。我会理想喜欢以下内容:

html_dict = { 
{% for k, v in my_dict.items %} 
    {% if check_v_is_str %} 
     {{ k }}: "{{ v }}", 
    {% else %} 
     {{ k }}: {{ v }}, 
    {% endif %} 
{% endfor %} 
}; 
+2

除了丹尼尔罗斯曼的正确答案,只是做{{my_dict}}'会给你正确的值 – Sayse

回答

7

不要这样做。当已经存在Python和JS都知道的定义良好的结构(即JSON)时,您正在手动尝试复制JS数据结构。改为使用它。在您的视图中将字典转换为JSON,并将其传递到可直接输出的模板。

+0

所以我试着这样做,我把我的帖子凿到这个小案例。但最终我最初是'dataframe'。而我想要做的就是传递'df.to_json(orient ='records')'。在HTML端,我做$ scope.my_variable = {{pass_json}},我在那里用引号引起错误 – sedavidw

+0

仔细看看它,json化的数据框看起来像这样:''[{“something”:1.0}] “'。 “似乎是HTML – sedavidw

+1

中的问题您可能需要将输出传递到Django ['| safe'](https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#safe)过滤器,以便引号不会被转义。 –

0

你可以定义一个名为“check_v_type”在你的模板调用如下过滤器:

{% if v|check_v_type == 'str' %} 

但我不认为这使得良好的逻辑。通常,您希望避免模板中的函数调用。相反,在你看来,你可以创建表格的元组的词典:

d = {'key1': (.98, False), 'key2': ('some_str', True), #...} 

然后,您可以使用布尔运算各组来决定如何格式化你的HTML的价值。