Различные ошибки всегда вызывают одну и ту же ошибку: ImproperlyConfigured: включенный URLconf 'myproject.urls', по-видимому, не содержит никаких шаблонов - PullRequest
1 голос
/ 20 мая 2019

У меня есть довольно стандартный проект Django с несколькими приложениями, каждое из которых имеет свои собственные адреса, модели, формы и т. Д. *

Моя проблема в том, что всякий раз, когда я делаю ошибку в своем коде - например, запись неверного имени для поля модели в атрибуте «fields» формы - ошибка всегда одинакова:

django.core.exceptions.ImproperlyConfigured: The included URLconf 'myproject.urls' does not appear to have any patterns in it. If you see valid patterns in the file then the issue is probably caused by a circular import.

Я ожидаю, что сообщение об ошибке изменится в соответствии с сделанной ошибкой. Это не делает все чрезвычайно сложным для отладки.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

В Django 2.2 обновлен код runserver . К сожалению, это имеет побочный эффект: некоторые ошибки отображаются не так отчетливо, как раньше.

Я создал тикет 30329 после прочтения этот вопрос . Похоже, вы столкнулись с подобной проблемой.

0 голосов
/ 20 мая 2019

Когда вы запускаете проект 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(), обратите внимание на круглые скобки) или как атрибут представления на основе классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...