2012-01-08 2 views
11

nella documentazione che dice:Come impedire la fuga automatica nei template di Django?

Le uniche eccezioni sono le variabili che sono già contrassegnati come “sicuri” di fuggire, sia per il codice che popola la variabile, o perché ha avuto la cassaforte o la fuga filtri applicati ."

come funziona il 'popolato l'opera parte variabile'? in realtà sono alla ricerca di un modo per dichiarare un tag template come sicuro nella vista. io in qualche modo penso che non sia una buona idea lasciare un designer decidere: il mio collega lo aggiungerà ogni volta che "pensa" che sia una buona idea.

https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs

risposta

22

Django ha una sottoclasse di stringhe chiamato sicuri stringhe (specificamente SafeUnicode o SafeString), che può essere creata usando django.utils.safestring.mark_safe. Quando il motore di template si imbatte in una stringa sicura che non esegue HTML fuggire su di esso:

>>> from django.utils.safestring import mark_safe 
>>> from django.template import Template, Context 
>>> Template("{{ name }}").render(Context({'name': mark_safe('<b>Brad</b>')})) 
u"<b>Brad</b>" 

Se si sta scrivendo il proprio tag modello, è necessario implementare render() che restituirà una stringa che saranno trattati come sicuro, nel senso che devi gestire qualsiasi evasione necessaria. Tuttavia, se stai scrivendo un filtro modello, puoi impostare l'attributo is_safe = True sul filtro per evitare l'escape automatico del valore restituito, ad es.

@register.filter 
def myfilter(value): 
    return value 
myfilter.is_safe = True 

Vedere https://docs.djangoproject.com/en/1.3/howto/custom-template-tags/#filters-and-auto-escaping per dettagli.

5

Si può chiamare django.utils.safestring.mark_safe e passare voi variabile

... 
return direct_to_template('my-template.html', {'safe_var': mark_safe('<script>alert("");</script>')}) 

Nel modello che verrà stampato senza sfuggire (avviso farà apparire). Anche se l'auto-fuga è davvero una grande caratteristica che ti salverà da alcune cose brutte.