Django 2.0 path error: (20.W001) a une route qui contient" (?P
Je suis nouveau à Django et j'essaie de créer le code d'arrière-plan pour une application musicale sur mon site web.
j'ai créé l'affichage correct 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>")
toutefois, 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 reçois un avertissement sur mon terminal disant:
?: (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 le chemin fonctionne) est suivi d'un nombre, tel que /music/1
(ce qui est ce que je veux pouvoir faire) la page ne peut pas être trouvée et le terminal donne l'avertissement ci-dessus.
c'est peut-être une simple erreur et juste moi étant stupide mais je suis nouveau dans les déclarations de Django et python regex, donc toute aide est appréciée.
3 réponses
La path()
la syntaxe de Django 2.0 n'utilise pas d'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'),
vieux url()
fonctionne toujours et est maintenant un alias re_path
, mais il est susceptible d'être obsolète dans l'avenir.
url(r'^(?P<album_id>[0-9])/$', views.detail, name='detail'),
juste pour ajouter à ce que @alasdair a mentionné, j'ai ajouté re_path dans le cadre de l'include et cela fonctionne très bien. Voici un exemple
Ajouter re_path d'importation (pour django 2.0)
from django.urls import path, re_path
urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^$', home, name='home'),
]
au Lieu d'utiliser 're_path", vous pouvez aussi utiliser "(chaîne vide) comme premier argument de votre path(). Je l'ai utilisé et il a travaillé pour moi.
urlpatterns = [
path('admin/', admin.site.urls),
path('',views.index,name='index'),
]