Search code examples
djangodjango-viewsdjango-urls

Django 2.0 path error ?: (2_0.W001) has a route that contains '(?P<', begins with a '^', or ends with a '$'


I'm trying to create the back-end code for a music application on my website.

I have created the correct view in my views.py file (in the correct directory) as shown below:

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

However, when creating the URL or path for this (shown below)

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

I am experiencing a warning on my terminal stating:

?: (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().

And whenever the /music/ (for which the path works) is followed by a number, such as /music/1 (which is what I want to be able to do) the page cannot be found and the terminal gives the above warning.


Solution

  • The new path() syntax in Django 2.0 does not use regular expressions. You want something like:

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

    If you want to use a regular expression, you can use re_path().

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

    The old url() still works and is now an alias to re_path, but it is likely to be deprecated in future.

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