66 votes

Erreur de chemin Django 2.0?: (2_0.W001) a une route qui contient '(? P <'), commence par un '^' ou se termine par un '$'

Je suis nouveau sur Django et suis en train de créer l'extrémité arrière de code pour une application de musique sur mon site.

J'ai créé la vue correcte dans mon views.py fichier (dans le bon répertoire) comme indiqué ci-dessous:

def detail(request, album_id):
    return HttpResponse("<h1>Details for Album ID:" + str(album_id) + "</h1>")

cependant, lors de la création de l'url ou le chemin de ce (ci-dessous)

#/music/71/ (pk)
path(r'^(?P<album_id>[0-9])/$', views.detail, name='detail'),

Je suis en train de vivre un avertissement sur mon terminal en déclarant:

?: (2_0.W001) Your URL pattern '^(?P<album_id>[0-9])/$' [name='detail'] has a route that contains '(?P<', begins with a '^', or ends with a '$'. This was likely an oversight when migrating to django.urls.path().

et à chaque fois que l' /music/ (pour lequel la trajectoire de travaux) est suivie par un nombre, comme /music/1 (qui est ce que je veux être en mesure de le faire) la page ne peut pas être trouvé et le terminal donne l'avertissement ci-dessus.

Il peut être une simple erreur et juste pour moi d'être stupide, mais je suis nouveau sur Django et python regex états, de sorte que toute aide est très appréciée.

129voto

Alasdair Points 36535

Le nouveau path() de syntaxe dans Django 2.0 ne pas utiliser des expressions régulières. Vous voulez quelque chose comme:

path('<int:album_id>/', views.detail, name='detail'),

Si vous souhaitez utiliser une expression régulière, vous pouvez utiliser re_path().

re_path(r'^(?P<album_id>[0-9])/$', views.detail, name='detail'),

Le vieux - url() fonctionne toujours et est maintenant un alias pour l' re_path, mais il est susceptible d'être obsolète dans l'avenir.

url(r'^(?P<album_id>[0-9])/$', views.detail, name='detail'),

17voto

Stryker Points 1474

Pour ajouter quelque chose à ce que @alasdair a mentionné, j’ai ajouté re_path dans le cadre de l’inclusion et cela fonctionne bien. Voici un exemple

Ajoutez re_path à votre importation (pour Django 2.0)

 from django.urls import path, re_path

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'^$', home, name='home'),

]
 

8voto

Akash Gupta Points 71

Au lieu d'utiliser 're_path', vous pouvez également utiliser '' (chaîne vide) comme premier argument de votre chemin (). Je l'ai utilisé et cela a fonctionné pour moi.

 urlpatterns = [
    path('admin/', admin.site.urls),
    path('',views.index,name='index'),
]
 

2voto

Hamza Naji Points 11

Si cela ne fonctionne pas, ajoutez ce code à votre site \ urls.py dans urlpatterns:

 path('music/<int:album_id>/', views.detail, name="detail"),
 

1voto

DILIP Points 11

Utilisez une chaîne vide '' au lieu de '/' ou r '^ $'. Il fonctionne comme un charme. Le code est comme ci-dessous:

 from django.urls import path, re_path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', home, name='home'),
]
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X