2009-08-20 10 views
5

http://www.djangobook.com/en/beta/chapter10/django comportamento di cambio modello per silent_variable_failure = False

"Si noti che django.core.exceptions.ObjectDoesNotExist, che è la classe base per tutti i database di API eccezioni DoesNotExist Django, ha silent_variable_failure = True. Quindi, se siete usando i template Django con gli oggetti del modello Django, ogni eccezione di DoesNotExist fallirà silenziosamente. "

Mentre sviluppo mi piacerebbe invertire questo comportamento, ad esempio silent_variable_failure = False. Come faccio a rendere questo cambiamento permanente mentre lo sviluppo sotto django?

Grazie, Nick

risposta

4

In settings.py ho aggiunto TEMPLATE_STRING_IF_INVALID = "stringa non valida '% s'" Vedere http://docs.djangoproject.com/en/dev/ref/templates/api/#invalid-template-variables per maggiori informazioni.

Include questa avvertenza "Molti modelli, inclusi quelli nel sito di amministrazione, si basano sul silenzio del sistema di modello quando viene rilevata una variabile inesistente. Se si assegna un valore diverso da" "a TEMPLATE_STRING_IF_INVALID, si sperimenterà problemi di rendering con questi modelli e siti. "

+0

In django 1.8 il 'TEMPLATE_STRING_IF_INVALID' [è stato modificato] (http://stackoverflow.com/a/33750585/1888983). Vedi [i documenti] (https://docs.djangoproject.com/en/1.8/ref/templates/upgrading/#the-templates-settings). – jozxyqk

0

Il sistema modello Django cerca i silent_variable_failure come un attributo di qualsiasi eccezione.

Ciò significa che è stata definita la propria eccezione con quell'attributo impostato su False.

Per l'eccezione standard ObjectDoesNotExist generata dall'ORM, ecc., La soluzione più semplice sarebbe quella di modificare il codice sorgente Django sulla casella di sviluppo (django/core/exceptions.py).

Se questo era qualcosa che era necessario modificare su un sistema di produzione, sarebbe necessario 1) definire la propria classe di eccezioni, 2) inserire un gestore sul modello che viene chiamato dal modello (invece di utilizzare i metodi ORM direttamente), quindi 3) rileva DoesNotExist nel tuo manager e aumenta nuovamente l'eccezione con la tua classe.

+0

Grazie per le buone informazioni. Ho modificato /usr/share/python-support/python-django/django/core/exceptions.py e cambiato in silent_variable_failure = False ma non ho potuto ottenere il comportamento da modificare. Non sono sicuro di aver bisogno di rigenerare il file .pyc. Ho cancellato /var/lib/python-support/python2.6/django/core/exceptions.pyc nella disperazione ma inutilmente. Penso che TEMPLATE_STRING_IF_INVALID farà ciò che voglio, forse il comportamento è diverso nella versione successiva di django. Sto eseguendo la versione 1.0.2 di Django finale –

0

Un'altra impostazione, TEMPLATE_DEBUG, può essere impostata su True in settings.py per modificare questo comportamento.

Problemi correlati