Уведомления

Группа в Telegram: @pythonsu

#1 Март 26, 2010 17:25:47

topazz
От:
Зарегистрирован: 2008-09-12
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Debug=False и ошибка 500

Что за настройка такая злая Debug.
Джанго использую 2 день, вникать во все тонкости не хочу, так как нужна быстрая реальзация простейшего функционала.

Делаем простейшую модель

class Tester(models.Model):
name = models.CharField(max_length=100)

class TesterForm(forms.ModelForm):
class Meta:
model = Tester

class TesterAdmin(admin.ModelAdmin):
list_display = ('name',)

admin.site.register(Tester, TesterAdmin)
И все нормально работает если Debug=True

НО если Debug=False, то при попытке в админке перейти на Tester получаю ошибку 500.

Это вообще как понимать? Админка сама следит за своими урлами или я должен их контролить?



Отредактировано (Март 26, 2010 17:26:44)

Офлайн

#2 Март 27, 2010 18:12:02

topazz
От:
Зарегистрирован: 2008-09-12
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Debug=False и ошибка 500

Вообще мистика какая-то . Добавил в папку templates два файла 404.html и 500.html стало кидать ошибку 404.
Я вообще перестал что либо понимать.
Повторяюсь с Debug=True все работает на отлично.
Может при Debug=True куданить лог пишется?
Как вообще понять в чем проблем?


registry - проект
validate - приложение

urls на уровне проекта

from django.conf.urls.defaults import *
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
(r'^registry/', include('registry.validate.urls')),
(r'^admin/', include(admin.site.urls)),
)
urls на уровне приложения

from django.conf.urls.defaults import *
from registry.validate.views import res

urlpatterns = patterns('',
(r'^$', res),
)



Офлайн

#3 Март 27, 2010 20:06:06

topazz
От:
Зарегистрирован: 2008-09-12
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Debug=False и ошибка 500

Добью уже вопрос. У кого похожая проблема.
Смотрим http://code.djangoproject.com/ticket/11918

Меняем

(r'^admin/', include(admin.site.urls))
На
(r'admin/(.*)', admin.site.root)
Получаем счастье.

Есть кто может объяснить почему так?



Офлайн

#4 Март 29, 2010 09:34:42

ziro
От:
Зарегистрирован: 2009-08-13
Сообщения: 225
Репутация: +  8  -
Профиль   Отправить e-mail  

Debug=False и ошибка 500

Легко:

1. При Debug=False джанга при 404 ошибке пытается выдать шаблон 404.html из templates директории. Но если Вы этот шаблон не положили в templates директорию, то джанга выбрасывает 500 ошибку, поскольку внутри джанги не проверяется наличие данного шаблона - он тупо выдается.

2. admin.autodiscover() ВСЕГДА ищет наследников от admin.ModelAdmin в файле <app-root>/admin.py и никогда не смотрит файл models.py. Поэтому в Вашем случае admin.site.urls будут пустые, так как у Вас, как я понял, админский интерфейс прописан прямо в models.py

3. admin.site.root - это устаревший способ поднятия админки - вполне возможно, что он шарит и по models.py, но он ЕМНИП в 2.0 будет отменен и пока сохранен для обратной совместимости. Его пока можно использовать, если Вы не планируете добавлять в админку собственные страницы со специфической обработкой данных (они подключаются через admin.site.urls).

А в принципе прицепите к сайту логирование ошибок - сильно облегчит жизнь - там про все это должно быть написано.



Офлайн

#5 Март 29, 2010 10:59:33

topazz
От:
Зарегистрирован: 2008-09-12
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Debug=False и ошибка 500

ziro
Легко:

1. При Debug=False джанга при 404 ошибке пытается выдать шаблон 404.html из templates директории. Но если Вы этот шаблон не положили в templates директорию, то джанга выбрасывает 500 ошибку, поскольку внутри джанги не проверяется наличие данного шаблона - он тупо выдается.

2. admin.autodiscover() ВСЕГДА ищет наследников от admin.ModelAdmin в файле <app-root>/admin.py и никогда не смотрит файл models.py. Поэтому в Вашем случае admin.site.urls будут пустые, так как у Вас, как я понял, админский интерфейс прописан прямо в models.py

3. admin.site.root - это устаревший способ поднятия админки - вполне возможно, что он шарит и по models.py, но он ЕМНИП в 2.0 будет отменен и пока сохранен для обратной совместимости. Его пока можно использовать, если Вы не планируете добавлять в админку собственные страницы со специфической обработкой данных (они подключаются через admin.site.urls).

А в принципе прицепите к сайту логирование ошибок - сильно облегчит жизнь - там про все это должно быть написано.
Вопрос в том почему при Debug=True все работает на ура?
Логирование каких ошибок? Апач молчит.



Отредактировано (Март 29, 2010 11:00:56)

Офлайн

#6 Март 29, 2010 14:11:44

ziro
От:
Зарегистрирован: 2009-08-13
Сообщения: 225
Репутация: +  8  -
Профиль   Отправить e-mail  

Debug=False и ошибка 500

При Debug=True джанга выводит трейсбэк в тексте ответа сервера и не использует шаблоны 404.html и 500.html - поэтому когда их нет все просто замечательно. А при Debug=False происходит ситуация описанная Вами.

Для логирования ошибок можно использовать разные варианты:

1. Штатно - при Debug=False вся информация об ошибках отсылается на почту, указанную в навстройках http://docs.djangoproject.com/en/dev/ref/settings/#admins Более подробно здесь - http://docs.djangoproject.com/en/dev/howto/error-reporting/#howto-error-reporting

2. При использовании mod_wsgi ошибки в лог апача пишутся из WSGI-переменной ‘wsgi.errors’. Их туда надо просто положить, например так: http://www.djangosnippets.org/snippets/1731/

3. Если запускаете через fastcgi - то там в параметрах для manage.py можно указать файл, куд писать все ошибки (ЕМНИП –error-log=xyz).



Офлайн

#7 Март 29, 2010 14:23:45

topazz
От:
Зарегистрирован: 2008-09-12
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Debug=False и ошибка 500

ziro
При Debug=True джанга выводит трейсбэк в тексте ответа сервера и не использует шаблоны 404.html и 500.html - поэтому когда их нет все просто замечательно. А при Debug=False происходит ситуация описанная Вами.

Для логирования ошибок можно использовать разные варианты:

1. Штатно - при Debug=False вся информация об ошибках отсылается на почту, указанную в навстройках http://docs.djangoproject.com/en/dev/ref/settings/#admins Более подробно здесь - http://docs.djangoproject.com/en/dev/howto/error-reporting/#howto-error-reporting

2. При использовании mod_wsgi ошибки в лог апача пишутся из WSGI-переменной ‘wsgi.errors’. Их туда надо просто положить, например так: http://www.djangosnippets.org/snippets/1731/

3. Если запускаете через fastcgi - то там в параметрах для manage.py можно указать файл, куд писать все ошибки (ЕМНИП –error-log=xyz).
Большое спасибо за подробное объяснение.

Но при Debug=True трейсов не сыпется так как все работает нормально.



Офлайн

#8 Авг. 4, 2013 21:23:14

firejuku
Зарегистрирован: 2013-08-04
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Debug=False и ошибка 500

Нужно заполнить ALLOWED_HOSTS в settings.py.

Warning

If DEBUG is set to False, all responses will be “Bad Request (400)” unless you specify the proper ALLOWED_HOSTS as well (something like for local development).


Your text to link here…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version