81
votes

Importorror: impossible d'importer le nom «URL» de «django.conf.urls» après la mise à niveau vers Django 4.0

Après la mise à niveau vers Django 4.0, j'obtiens l'erreur suivante lors de l'exécution python manage.py runserver

from django.conf.urls

from myapp.views import home

urlpatterns = [
    url(r'^$', home, name="home"),
    url(r'^myapp/', include('myapp.urls'),
]


0 commentaires

4 Réponses :


131
votes

django.conf.urls.url () a été obsolète dans Django 3.0, et est supprimé dans Django 4.0 +.

La correction la plus simple consiste à remplacer url () / Code> avec re_path () . re_path utilise regexes comme url , vous n'avez donc qu'à mettre à jour l'importation et remplacer url par re_path . p>

from django.urls import include, path

from myapp.views import home

urlpatterns = [
    path('', home, name='home'),
    path('myapp/', include('myapp.urls'),
]

Alternativement, vous pouvez passer à l'utilisation path . path () n'utilise pas les regex, vous devrez donc mettre à jour vos modèles d'URL si vous passez à Path.

from django.urls import include, re_path

from myapp.views import home

urlpatterns = [
    re_path(r'^$', home, name='home'),
    re_path(r'^myapp/', include('myapp.urls'),
]

Si vous avez un Grand projet avec de nombreux modèles d'URL à mettre à jour, vous pouvez trouver le django-upgrade bibliothèque utile pour mettre à jour votre URLS.py fichiers.


5 commentaires

Ceci est très important, notamment parce que le dernier tutoriel PyCharm chez JetBrains utilise toujours django.conf.urls. Surtout pour les nouveaux gens, il est toujours déconcertant d'avoir du code copié à partir d'un tutoriel qui vous rompt.


Merci, mais je ne sais pas encore pourquoi j'obtiens url du modèle initial pendant que j'avais installé Django4


@ user.dz le django 4.0 modèle n'utilise pas url . Si vous vous retrouvez avec url dans votre modèle, vous avez probablement une version antérieure de Django installée. Exécuter quel django-admin ou django-admin --version pourrait vous aider à déterminer ce qui se passe. Utilisez python -m django pour vous assurer d'utiliser le django correct pour votre Env virtuel, par ex. python -m django startProject myproject .


Vous avez raison, j'ai été surpris de voir django-admin version 1.11 dans un environnement virtuel. Je fais du balayage et nettoie pour la maison, trouvé: Python 2.7, 3.6, 3.7, 3.8, 3.9, 3.10 dans / usr / local et un autre python dans Library (macOS ). Le mien a été installé dans Library et lié dans / opt D'une manière ou d'une autre, cela prenait la priorité. Je le supprime et je commence de zéro avec des modèles corrects.


Je préfère le changement à l'utilisation du chemin, il semble plus approprié ...



2
votes

Voir dans la version Django 4.0 Cela ne fonctionnera pas. Ainsi, lors de l'installation de Django dans votre environnement virtuel, sélectionnez cette version

pip install django == 3.2.10

Cela résoudra certainement votre erreur et dans principaux URLS.py faites ceci:

à partir de django.conf.urls Import Url

à partir de django.urls d'importation, incluez


2 commentaires

La rétrogradation de Django 3 est une solution temporaire. À un moment donné, les utilisateurs doivent passer à Django 4 ou version ultérieure, et à ce stade, vous devez remplacer url () s


De plus, il est probablement plus sûr pour pip install 'django <4.0' que de choisir une version épinglée



36
votes

Je pense qu'une solution rapide à ce problème consiste à faire des suites;

vous pouvez facilement remplacer

from django.urls import re_path as url

à ceci:

from django.conf.urls import url


0 commentaires

0
votes

Cire ceci en changeant ...

from django.urls import re_path as url 

et bien sûr en remplaçant re_path par url dans urlpatterns code>


1 commentaires

Cela semble être une remise des réponses précédentes.