2013-08-29 3 views
0

У меня есть пользовательский декоратор на вид, и я должен кэшировать этот вид после обработки некоторых переменных запроса. Мой декоратор код как этотDjango custom decorator с ошибкой cache_page

def custom_dec(view_func): 
    @wraps(view_func, assigned=available_attrs(view_func)) 
    def wrapper(request,filters,*args,**kwargs): 
     # do some processing on request and filters 
     return csrf_exempt(cache_page(900, view_func)) 
return wrapper 

и я применил декоратор как:

@custom_dec 
def myview(request,filters,*args,**kwargs): 
    # view code here 

Проблема заключается в запуске этого кода дает мне ошибку при прохождении промежуточного программного обеспечения:

Исключение Тип : AttributeError
Исключительное значение: объект «функция» не имеет атрибута «status_code»

Когда i посмотрите на ответ, это функция myview, а не ответ вида.
Ответ <function myview at 0xb549e534>

Что не так в моем коде?

UPDATE: код работает нормально, если я изменяю функцию возврата в функцию warpper на return view_func, что означает, что я должен делать что-то неправильно при применении декоратора страницы кэша.

+0

Вы возвращаете объект HttpResonse с вашего взгляда? Опубликуйте полный код просмотра здесь как есть. –

+0

@SrinivasReddyThatiparthy: да, код просмотра работает без этого декоратора. –

+0

Нет. В этом случае это не работает. вам нужно вернуть объект HttpResponse из этого представления, даже если вы кешируете. –

ответ

0

Оказывается, мне пришлось вернуть объект HttpResponse. Он работал, когда я сменил код на:

def custom_dec(view_func): 
    @wraps(view_func, assigned=available_attrs(view_func)) 
    def wrapper(request,filters,*args,**kwargs): 
     # do some processing on request and filters 
     cached_func = cache_page(900, view_func) 
     return cached_func(request,filters,*args,**kwargs) #this returns an HttpResponse object 
     # the above two line could also be written as cache_page(900, view_func)(request,filters,*args,**kwargs) 
return wrapper