Django: Как мне использовать assert ... без отображения страницы с системной ошибкой? - PullRequest
1 голос
/ 12 мая 2010

Я новичок в Django и у меня есть код в моем views.py, например:

try:
    myfunction()
except:
    assert False, sys.exc_info()[0]

Это очень полезно, потому что я получаю письмо с большим количеством полезной информации, если есть ошибка. Проблема в том, что он также перенаправляет пользователя на страницу системной ошибки Webfaction. Что я хотел бы знать, так это как я могу получить полезное сообщение об ошибке, но перенаправить пользователя на свою страницу ошибки?

Кроме того, это лучший способ обработки ошибок в Django?

Ответы [ 2 ]

4 голосов
/ 12 мая 2010

Это неправильно на многих уровнях.

Во-первых, нет причины ловить исключение только для того, чтобы вызвать другое. Если ваше приложение вызывает исключение, то собственное промежуточное ПО Django его перехватит, и в зависимости от того, есть ли у вас DEBUG=True, либо отобразите подробную страницу отладки, либо отправьте исключение по почте пользователям, указанным в настройке ADMINS. 1005 *

Во-вторых, вы никогда не должны получать страницу ошибки Webfaction - я даже не представляю, как это происходит. Если вы хотите, чтобы ваши пользователи видели красивую страницу с ошибкой, вам следует определить шаблоны 404.html и 500.html или даже полное представление обработки ошибок, если ваши потребности сложнее. Это полностью объяснено в документации .

1 голос
/ 12 мая 2010

Как насчет использования mail_admins для отправки себе почты, когда что-то происходит?

например

from django.template.loaders import render_to_string

...

try:
   #something cool but edgy here
except YourFavouriteException, yfe:
   message_body = render_to_string('path/to/a/template/if/you/want.txt', {'exception': yfe, 'type_of_exception': type(yfe) } ## you could add more detail to this, of course
   mail_admins('Something exploded', message_body)
...