Using reverse(...)
is better than using reverse_lazy(...)
when the url is being reversed after URLConf
has been loaded.
Django looks up the URL name as defined in URLConf
to generate the URL. There are times when we want to use a URL before the URLConf
has been loaded, such as:
success_url
@permission_required('foo.bar', login_url=reverse_lazy(...))
If the URLConf
has been loaded there is no need to use reverse_lazy(...)
- just use reverse(...)
, becasue doing otherwise adds unecessary complexity.
So in practice, do this
from django.urls import reverse
def my_view(request):
url = reverse('foo')
...
Instead of this
from django.urls import reverse_lazy
def my_view(request):
url = reverse_lazy('foo')
...
Django Doctor will run this check by default. No configuration is needed but the check can be turned on/off using check code reverse-lazy-misuse
in your pyproject.toml file.