Django 2.0 chemin erreur ?: (2_0.W001) a un itinéraire 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 le /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.
- Je pense que vous voulez utiliser les
re_path
, ou de ne pas utiliser des regex dans le modèle d'url (path('music/<int:album_id>/', ....)
. - On mélange les nouvelles et anciennes url de la syntaxe. Changer l'url de
path('<int:album_id>/', views.detail, name='detail')
ou utiliser lesre_path
- Ce serait tellement bien si django serait de dire ce qu'il faut utiliser à la place.
Vous devez vous connecter pour publier un commentaire.
La nouvelle
path()
syntaxe dans Django 2.0 ne pas utiliser des expressions régulières. Vous voulez quelque chose comme:Si vous souhaitez utiliser une expression régulière, vous pouvez utiliser
re_path()
.L'ancien
url()
fonctionne toujours et est maintenant un alias pourre_path
, mais il est susceptible d'être obsolète dans l'avenir.Juste à ajouter à ce que @alasdair mentionné, j'ai ajouté re_path dans le cadre de l'inclure et il fonctionne très bien. Voici un exemple
Ajouter re_path d'importation (pour django 2.0)
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.
Utiliser une chaîne vide " au lieu de '/' ou r'^$'. Il fonctionne comme un charme. Le Code est comme ci-dessous:
Si cela ne fonctionne pas ajouter ce code yoursite\urls.py à l'intérieur de urlpatterns: