Most of views
in my django app use @login_required
decorator. Also, I have three different login urls. Views have corresponding login urls hardcoded into their @login_required
decorators.
@login_required('myapp/logintype1'):
def usertype1_home(request):
# Further dode
# ...
@login_required('myapp/logintype2'):
def usertype2_home(request):
# Further code
# ...
Since the number of such views is quite large, whenever I change login url in urls.py
I have to change login-url
in all the decorators. I want to use something like {% urls 'urlpatter1' %}
and {% urls 'urlpatter2' %}
. Can I use reverse
?
How I can use named url patterns instead of hard coding url patterns in @login_required
decorator?
Somewhere in the top of views.py
after import ...
statements add something like this
login_type1 = reverse_lazy('urlpatter1') # or LOGIN_TYPE1
login_type2 = reverse_lazy('urlpatter2') # or LOGIN_TYPE2
And use these variables later
@login_required(login_url=login_type1)
...
UPDATE: reverse
was replaced with reverse_lazy
as @Alasdair suggested. See docs (2nd point).