Adam
Adam

Reputation: 3128

Going to another view

Say I have the following view:

def show(request):
    protect(request)

    ... some more code here...

    return render_to_response
    ...

"protect" is another app view which I am importing like this: from watch.actions import protect

In protect, I make some checks and if a condition is met, I want to use render_to_response right from "protect" and prevent returning to show. If the condition is not met, I want to normally return to "show" and continue the code execution.

How may I do that?

Thanks.

Upvotes: 0

Views: 58

Answers (1)

dgel
dgel

Reputation: 16796

If its only purpose is what you've described, you should consider writing protect as a view decorator. This answer provides one example of how to do so.

Based on view decorators that I have written, your protect decorator could look something like:

from functools import wraps

from django.utils.decorators import available_attrs

def protect(func):
    @wraps(func, assigned=available_attrs(func))
    def inner(request, *args, **kwargs):
        if some_condition:
            return render_to_response('protected_template')
        return func(request, *args, **kwargs)
    return inner

Which would allow you to then use it like:

@protect
def show(request):
   ...
   return render_to_response(...)

Upvotes: 1

Related Questions