2012-04-13 7 views
14

Questo è un modello di tornado (ad esempio, nel file logout.html) rendo su un errore nel processo di logout:Gestione di una variabile di modello indefinito in Tornado

{% if logout_error %} 
    Oops! The logout failed. Please close all open documents and try again 
    {% end %} 

Questo può essere chiamato con

self.render("logout.html", logout_error=True) 

Se la disconnessione è successo, devo fare

self.render("logout.html", logout_error=False) 

Se ignoro logout_error=False, ottengo

Se ci sono molti flag (che sono falsi), gli argomenti delle parole chiave possono accumularsi. C'è un modo in cui posso chiedere al modello di considerare logout_error come False se non esiste?

risposta

16

Hacking in giro con locals().get() è un modo per farlo. Un altro, un po 'più ortodosso sta usando try. modello Tornado supporta, in modo da poter:

{% try %} 
    {% if logout_error %} 
    Oops! The logout failed. Please close all open documents and try again 
    {% end %} 
{% except %} 
{% end %} 
+1

vartec, grazie per la risposta. Segnerò la risposta di phihag come corretta (nonostante il fatto che stia bene) a causa della sua brevità. –

+1

Questa mi sembra la soluzione migliore, specialmente dopo aver letto questo racconto semi-ammonitore sui locals() http: // stackoverflow. com/domande/1550479/python-è-con-Vars-locali-un-buon-pratica. (I template di Django falliscono silenziosamente di default, vero?) – jsh

+1

Per qualche ragione non ho mai avuto 'locals(). Get()' per funzionare. La tua soluzione funziona bene però. Grazie! +1 – Micke

14

È possibile utilizzare

{% if locals().get('logout_error', False) %} 

Sostituto False con il valore desiderato se la proprietà non è impostata.

+2

Come punti @shenyan di seguito, in alcune circostanze (per me, se si passa nelle variabili per il modello con 'render') le variabili finiscono in' globals', non 'locals'. Non sono sicuro che sia possibile fare affidamento su questo comportamento: un po 'più di discussione qui: https://groups.google.com/forum/#!topic/python-tornado/MppS69GjZk0. La risposta try/catch è brutta ma è più resiliente. – tobek

0

Il "modo Tornado" è di non avere variabili non dichiarate. È più zen a dichiarare le variabili esplicite.

Soluzione:

{% if 'grok' in globals() %} 
    {{grok}} 
{% end %} 

{% if globals().get('grok_error', False) %} 
    error message 
{% end %} 
Problemi correlati