Re: HttpResponse.has_header
On Fri, May 10, 2013 at 2:13 PM, Larry Martell <larry.martell@gmail.com> wrote:
> On Fri, May 10, 2013 at 9:37 AM, Larry Martell <larry.martell@gmail.com> wrote:
>> On Fri, May 10, 2013 at 8:55 AM, Tom Evans <tevans.uk@googlemail.com> wrote:
>>> On Fri, May 10, 2013 at 2:52 PM, Larry Martell <larry.martell@gmail.com> 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 django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home