2016-01-19 21 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的價值。