2011-06-08 19 views
5

JSON içeren bir değişkeni bir şablona geçirmem gerekiyor. Bunu bir değişken olarak tanımlarım ve sonra şablona başarıyla aktarıyorum. Ancak, tırnakları " ile değiştirmek için biçime ihtiyacım var, ancak ' ile değiştiriliyor. Bu benim "bu geçirerek ediyorum hizmetiyle sorunlara yol açıyordjango şablonunda JSON kullanma

İşte
image_upload_params = 
{ 
    "auth": { 
    "key": "xxx" 
    }, 
    "template_id": "xxx", 
    "redirect_url": "url-here", 
} 

nasıl şablonda sağlasın edilir.

{'redirect_url': 'url-here', 'template_id': 'xxx', 'auth': {'key': 'xxx'}} 

Bir fikrin nasıl yerine " kullanmak alınır?

cevap

12

Kullanım SafeString:

from django.utils.safestring import SafeString 

def view(request): 
    ... 
    return render(request, 'template.html', {'upload_params': SafeString(json_string)}) 
+0

Teşekkür:

filtre kodu bu

custom_filter.py

from django.template import Library from django.utils.safestring import SafeString import json register = Library() @register.filter("escapedict") def escapedict(data): if not isinstance(data, dict): return data for key in data: if isinstance(data[key], int) and not isinstance(data[key], bool): data[key] = int(SafeString(data[key])) else: data[key] = SafeString(data[key]) return json.dumps(data) 

django document

Ve şablonda, böyle filtreyi kullanın benziyor . Ana sorunu farkettim. Değişkeni ayarlarken, python çift tırnaklarımı tek tırnaklı olarak değiştiriyor. Bu sorunun köküdür. Bu hizmet için, çift tırnak olması gerekiyor. Fikirler? – Brenden

+0

Bunun neden önemli olduğunu şaşırdım ... 'json' modülünü kullanırsanız güvenli bir şekilde sizin için her şeyden kaçacaktır. Yine de isterseniz, JSON'u istediğiniz formatta bir dize olarak kaydedebilirsiniz, 'SafeString' ile işaretleyin ve şablona geçin. – zeekay

0

önceki cevabı y açılıyor Bizim programımız XSS saldırılarına, '' de dahil olmak üzere dizgiler düzgün bir şekilde kaçmayacak, böylece bir üst etiket kapatılacak.

1

Zeekay'in belirttiği gibi, sadece python yerleşik json kütüphanesini kullanın. Otomatik olarak geçerli json verisi çıkacaktır. Django'nun şablonlarda kullanması için onu "güvenli" olarak işaretlemeniz gerekir ancak bunu "güvenli" şablon filtresini kullanarak yapabilirsiniz.

0

Django özel şablon filtresini kullanan bir yöntem buldum.

... 
{% load custom_filter %} 
some html 
... 
onclick="jsfunc('{{data|escapedict}}')" 
... 
some html 
... 
... 
function showdetails(data){ 
    parse data here 
} 
... 
... 
İlgili konular