Когда вы запускаете проект Django, используя runserver
, Django загружает шаблоны URL. Обычно внутри ваших шаблонов URL вы импортируете свои представления. Которые в свою очередь импортируют ваши модели и формы.
Таким образом, если какой-либо из этих файлов содержит синтаксическую ошибку или ошибку Python на верхнем уровне (см. Ниже), это приведет к сбою загрузки URL-адресов. Однако, если вы прокрутите свою трассировку вверх, вы увидите другую ошибку, фактическую ошибку, которая привела к сбою импорта. Он скажет где-то «во время обработки этого исключения произошло другое исключение».
Однако Python на самом деле не выполняет весь код, который он импортирует. Определение класса просто заставит python прочитать имя класса и его атрибуты (метод также является атрибутом).
Когда python импортирует класс, он вызывает его метод __new__()
, а не метод __init__()
или любой другой метод, который вы определяете. Таким образом, будут выброшены только ошибки на верхнем уровне класса (например, использование неизвестных переменных в определении атрибутов) или ошибки внутри класса Meta
.
** edit **: fields = ['some_field']
внутри класса Meta
действительно запускается при создании объекта класса (метод __new__()
), и Django проверит, существует ли поле в соответствующей модели, потому что оно присваивает его к атрибуту _meta
класса.
В других случаях, когда вы говорите «всякий раз, когда я делаю ошибку в своем коде», это, как правило, не должно вызывать ошибку, потому что python не должен на самом деле создавать экземпляр формы (запускать метод __init__()
) или запускать какие-либо из методов. ты пишешь. Поэтому вам следует избегать создания каких-либо классов на верхнем уровне вашего кода, создание экземпляров должно происходить внутри функций / методов, тогда python не будет попадать в эти ошибки.
Так что проверьте ваши файлы views.py, чтобы увидеть, импортируете ли вы только классы форм (from my_forms import MyForm
) или создаете экземпляр формы на верхнем уровне вашего файла (form = MyForm()
, обратите внимание на круглые скобки) или как атрибут представления на основе классов.