django - unchained - the hateful eight




Come verificare se la variabile del modello django รจ definita? (2)

Ho un modello di Django che viene utilizzato da molte viste. Il modello ha un blocco per i messaggi utilizzati per informare l'utente di tutto ciò che dovrebbe attirare la loro attenzione. Se un messaggio viene inviato o meno dipende dalle visualizzazioni. Alcune viste possono inviare una variabile di message al modello mentre altre no.

view_1:
    message = "This is an important message"
    render_to_response("my_template.html", 
                       {'message':message, 'foo':foo, 'bar':bar},
                       context_instance = RequestContext(request))

view_2:
    message = "This is an important message"
    render_to_response("my_template.html", 
                       {'foo':foo, 'bar':bar},
                       context_instance = RequestContext(request))

Nel modello, controllo la variabile del message e includo il blocco come di seguito:

base_template.html:
    ....
    {% block main_body %}
         {% block messages %}
         {% endblock %}
         {% block content %}
         {% endblock %}
    {% endblock %}
    ....

 my_template.html:
     {% extends base_template.html %}
     ....
     {% if message %}
          {% block messages %}
              <div class='imp_msg'>{{ message }} </div>
          {% endblock %}
     {% endif %}
     ...

Il problema è che anche se view_2 non passa un messaggio, l'html finale viene reso con <div class='imp_msg'></div> - fondamentalmente un div vuoto.

Dal momento che il CSS è progettato per fornire uno sfondo light_red ai messaggi, quello che vedo è una barra light_red vuota nella parte superiore della pagina.

Ho anche provato: {% ifnotequal message None %} , {% ifnotequal message '' %} , provato a impostare il message su None o '' esplicitamente, ma non sembra essere d'aiuto.

Gradirei un aiuto!


Devi cambiare il {% block %} e il tuo {% if %}

{% block messages %}
    {% if message %}<div class='imp_message'>{{ message }}</div>{% endif %}
{% endblock %}

Per verificare, in una dichiarazione if, è necessario confrontare il valore con Nessuno, in questo modo:

{% if some_missing_var != None %}
   // code here if some_missing_var exists
{% else %}
   // code here if some_missing_var does not exist
{% endif %}

In altri casi (dai documenti):

Generalmente, se una variabile non esiste, il sistema di template inserisce il valore dell'opzione di configurazione string_if_invalid del motore, che è impostata su '' (la stringa vuota) per impostazione predefinita.

Ho provato alcune delle altre risposte, e non hanno funzionato fino a quando non ho letto i documenti e quanto sopra è stato chiarito.

link a documenti che descrivono la gestione di variabili non valide





django-templates