Assuming that you are using contrib.auth.views.password_reset (you may need to adjust this strategy for a custom view, etc.):
A quick custom view that simply sets a parameter when it calls the generic view and a tweak to the URLconf could solve this:
Only need a single URLconf line for something like 'password/reset/' that calls the custom view. All password resets will run through this URL regardless of 'authorization level', as you put it.
url(r'^password/reset/$', myviews.pass_reset_set_redirect, name='password_reset')
In your templates, for each area, such as /instructor/*, the link to the password reset would look something like <a href='{% url 'password_reset' %}?next=instructor'. This will create a link to a URL path like 'password/reset?next=instructor'. How you generate that link (either based on context vars or directly in the template) is up to you and your design.
Custom view:
def pass_reset_set_redirect(request):
DEFAULT_LOCATION = 'public'
locations = { 'public': 'public_home', 'instructor': 'instructor_home', 'staff': 'staff_home' } # *_home are the names of the URL's that will be used for the redirect and should be resolvable by reverse(), etc.
# set a default in the event that the ?next=* parameter is something that is not a key in locations
redirect_url = locations[DEFAULT_LOCATION]
# DEFAULT_LOCATION gets used if ?next=blah is not given at all
if request.GET.get('next', DEFAULT_LOCATION) in locations:
redirect_url = locations[request.GET.get('next')]
# call the generic view with post_reset_redirect set to our URL name with all the benefits of Django doing the hard part of handling the rest of the request
return contrib.auth.views.password_reset(request, post_reset_redirect=redirect_url)
I haven't tested this so YMMV, and it probably needs a couple of imports, etc., but I'm hoping you get the idea. This approach is somewhat extensible as the locations can be easily expanded to adapt to new 'authorization' levels if you decide you need them, or can be pulled from the database, etc.
Someone let me know if I'm way off here, haven't written a FBV for a few years.