On Apr 25, 11:46 am, Malcolm Tredinnick <[EMAIL PROTECTED]>
wrote:
> I have doubts that using reverse() in the settings file is going to
> work. It relies on the value of ROOT_URLCONF, which will only be
> available once the settings module has been fully imported. So trying to
> access that value *whilst* settings is being imported looks like it's
> doomed to failure.
>
> There are some cases where you're just going to need to put strings for
> URLs. Feel free to come up with a fix, though.
The first thing that comes to mind is to have a setting called
LOGIN_VIEW rather than LOGIN_URL. Then, rather than functions
redirecting to LOGIN_URL they call reverse(LOGIN_VIEW) instead.
To use django.contrib.auth.decorators.user_passes_test as an example:
from django.core.urlresolvers import reverse
def user_passes_test(test_func, login_url=None):
"""
Decorator for views that checks that the user passes the given
test,
redirecting to the log-in page if necessary. The test should
be a callable
that takes the user object and returns True if the user
passes.
"""
def _dec(view_func):
def _checklogin(request, *args, **kwargs):
if test_func(request.user):
return view_func(request, *args, **kwargs)
from django.conf import settings
login_url = reverse(settings.LOGIN_VIEW)
return HttpResponseRedirect('%s?%s=%s' % (login_url,
REDIRECT_FIELD_NAME, quote(request.get_full_path())))
_checklogin.__doc__ = view_func.__doc__
_checklogin.__dict__ = view_func.__dict__
return _checklogin
return _dec
(Pretty-printed code available at http://dpaste.com/hold/9032/.)
How does that look?
M.
--
Matt Riggott (mailto:[EMAIL PROTECTED]).
Dictated but not read.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---