2012-02-09 46 views
4

我需要澄清。如果我的例子做一個視圖中,帶有序列化對象:從Django模板獲取序列化的json對象?

def sample(request): 
    res = [{'name':'man'}] 
    encoded = json.dumps(res) 
    return render_to_response('sample/example.html',{'encoded':encoded}) 

在我的模板,我傳:

{{encoded}} 
從python腳本

現在我可以這樣做:

data = json.loads(urllib2.urlopen(url/to/site).read() 

它說ValueError:沒有JSON對象可以被解碼。但是不是{{encoded}}一個json對象?如果是這樣,我怎麼得到它?

謝謝

+3

我會做一個'打印urllib2.urlopen(URL /到/網站).read() 「首先。我敢打賭,Django逃離了這條線。 – Blender 2012-02-09 16:24:25

+0

這是一個*轉義的HTML字符串。 '"'應該是'''。看到我的答案。 – Blender 2012-02-09 16:31:13

回答

8

在您的模板試試這個:

{% autoescape off %} 
    {{ encoded }} 
{% endautoescape %} 
+0

我在打印urllib2.urlopen中使用autoescape得到[{「name」:「man」}],但仍無法解碼json對象。非常感謝你。 – Neeran 2012-02-09 16:35:58

+0

除此頁面中的文字外還有其他內容嗎?任何HTML代碼? – Blender 2012-02-09 16:37:13

+0

謝謝你的工作,我刪除了其他的東西 – Neeran 2012-02-09 16:40:26

1

你也許會發現,有引號過得去Django的逃過一劫。我最近和Jinja2模板有類似的問題。在我的情況下,JSON正在進入一個HTML數據屬性,並且不適當地逃避了事情。在我使用過濾器標記它安全後,它停止轉義引號並且有不匹配的引號。解決方案是

{% set dbl_quote='"' %} 
{{ encoded |replace(dbl_quote, '"') |safe}} 

但這可能會在Django看起來不同。

您可能需要使用{% autoescape off %}或類似的,而不是如果你模板化它直接轉換成JavaScript的東西,等

+0

無論你做什麼,你可能想要做一些像[這個片段](http://djangosnippets.org/snippets/201/)在過濾器中轉換爲JSON,所以如果你必須標記它安全或任何你可以在過濾器內的一個地方做到這一點。 – 2012-02-09 16:40:57

+0

謝謝你,這非常有幫助 – Neeran 2012-02-09 16:42:54

相關問題