使用django模板确定我是否需要HTML中的引号

时间:2016-01-19 14:05:21

标签: python django django-templates

我在python中有dict,如下所示:

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 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

您可以定义名为" check_v_type"的过滤器。按如下方式调用模板:

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

但我不认为这会产生良好的逻辑。通常,您希望避免模板中的函数调用。相反,在您的视图中,您可以创建以下形式的元组字典:

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

然后,您可以在每个元组中使用布尔值来决定如何格式化HTML中的值。