How to get the current url name using Django?
For those who namespace their url patterns, then you may be interested in the namespaced url name of the request. In this case, Django called it view_name
instead.
request.resolver_match.view_name
# return: <namespace>:<url name>
I don't know how long this feature has been part of Django but as the following article shows, it can be achieved as follows in the view:
from django.core.urlresolvers import resolve
current_url = resolve(request.path_info).url_name
If you need that in every template, writing a template request can be appropriate.
Edit: APPLYING NEW DJANGO UPDATE
Following the current Django update:
Django 1.10 (link)
Importing from the
django.core.urlresolvers
module is deprecated in favor of its new location,django.urls
Django 2.0 (link)
The
django.core.urlresolvers
module is removed in favor of its new location,django.urls
.
Thus, the right way to do is like this:
from django.urls import resolve
current_url = resolve(request.path_info).url_name
As of Django 1.5, this can be accessed from the request object
current_url = request.resolver_match.url_name
If you would like the url name along with the namespace
current_url = request.resolver_match.view_name
https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.resolver_match