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.

21
demandé sur Alasdair 2017-12-05 22:47:38

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'),
43
répondu Alasdair 2017-12-05 19:55:59

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'),

]
6
répondu Stryker 2017-12-18 04:59:54

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'),
]
1
répondu Akash Gupta 2018-06-04 05:07:36