On Fri, May 10, 2013 at 2:13 PM, Larry Martell <[email protected]> wrote:
> On Fri, May 10, 2013 at 9:37 AM, Larry Martell <[email protected]> 
> wrote:
>> On Fri, May 10, 2013 at 8:55 AM, Tom Evans <[email protected]> wrote:
>>> On Fri, May 10, 2013 at 2:52 PM, Larry Martell <[email protected]> 
>>> wrote:
>>>> Just upgraded to 1.5 and my app is failing with:
>>>>
>>>> Internal Server Error:
>>>> Traceback (most recent call last):
>>>> File "/Library/Python/2.7/site-packages/django/core/handlers/base.py",
>>>> line 187, in get_response
>>>>      response = middleware_method(request, response)
>>>>    File 
>>>> "/Library/Python/2.7/site-packages/django/contrib/sessions/middleware.py",
>>>> line 26, in process_response
>>>>      patch_vary_headers(response, ('Cookie',))
>>>>    File "/Library/Python/2.7/site-packages/django/utils/cache.py",
>>>> line 142, in patch_vary_headers
>>>>      if response.has_header('Vary'):
>>>>  [error] AttributeError: 'function' object has no attribute 'has_header'
>>>>
>>>> My code that is triggering this:
>>>>
>>>> if report_response.has_header('Content-disposition'):
>>>>
>>>> I didn't see anything in the docs that said this method was being
>>>> removed from the HttpResponse class.
>>>>
>>>
>>> It hasn't. If you look at the exception message closely, you will see
>>> that it does not say "HttpResponse object has no attribute ...", it
>>> says "function object has no attribute ...". Somehow, this middleware
>>> is receiving a function instead of a response object.
>>>
>>>> Anyone know how I can fix this so I can use 1.5?
>>>>
>>>
>>> The full stack trace may explain more, but then again maybe not - the
>>> exception happens in middleware processing, but the error is returning
>>> a function instead of a HttpResponse object in the content generation
>>> phase (ie in the view). You will probably need to look closely at each
>>> function the request passes through on this particular request, and
>>> work out where the bogus return value is coming from.
>>
>> That is the full stack trace. I have just one piece of middleware:
>>
>> import re
>> class LastSiteUrl(object):
>>
>>     def is_admin_url(self, url):
>>         if re.search('^(http:\/\/.*){0,1}\/admin\/', url) is None: 
>> return(False)
>>         else: return(True)
>>
>>     def process_request(self, request):
>>         if self.is_admin_url(request.path) and \
>>             not self.is_admin_url(request.META['HTTP_REFERER']):
>>             request.session['last_site_url'] = request.META['HTTP_REFERER']
>>
>> I don't see how that could be causing this. What changed in 1.5 to
>> break this? In 1.4 I do not get this error with the same middleware.
>
> I traced it all through base.py and the issue seems to be that my
> views don't return a HttpResponse object. I have to go back to 1.4 and
> my old code and see what it's returning there (I made a lot of changes
> for direct_to_template and redirect_to). I wouldn't think an upgrade
> would require so many changes :-(

So here's the problem. I replaced direct_to_template with
TemplateView.as_view (as I read at
https://docs.djangoproject.com/en/1.4/topics/generic-views-migration/)
but direct_to_template returned a HttpResponse object and
TemplateView.as_view does not. It then blows up at:

  File "/Library/Python/2.7/site-packages/django/utils/cache.py", line
142, in patch_vary_headers
    if response.has_header('Vary'):
AttributeError: 'function' object has no attribute 'has_header'

Surely others must have changed direct_to_template to TemplateView.
How do I get around this?

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to