Hmmm ... is there any other way to achieve the same result ( using a
special template for mobile devices ) without hacking this into each
view? MiddleWare using

https://docs.djangoproject.com/en/dev/topics/http/middleware/?from=olddocs/#process-template-response

for instance?

Anyway, thanks for your input.

Thomas

On Thu, Aug 9, 2012 at 3:09 PM, Daniel Roseman <dan...@roseman.org.uk> wrote:
>> On Thursday, 9 August 2012 13:18:36 UTC+1, MrMuffin wrote:
>>>
>>> I need to change what template to use in a response based on type of
>>> user-agent in request. The middleware below works ok to detect mobile
>>> client, but I cannot get the template manipulation in the process_view
>>> method  to work.
>>>
>>> The middleware:
>>>
>>> # Credits: http://djangosnippets.org/snippets/2001/
>>> import re
>>>
>>>
>>> class MobileDetectionMiddleware(object):
>>>     """
>>>     Useful middleware to detect if the user is
>>>     on a mobile device.
>>>     """
>>>
>>>     def process_view(self, request, view_func, view_args, view_kwargs):
>>>         if not request.is_mobile:
>>>             return
>>>
>>>         print vars(view_func), view_args,view_kwargs # these are
>>> allways blank/empty
>>>         template = view_kwargs.get("template")
>>>         if template is None and view_func.func_defaults:
>>>             for default in view_func.func_defaults:
>>>                 if str(default).endswith(".html"):
>>>                     template = default
>>>                     break
>>>
>>>         if template is not None:
>>>             template = template.rsplit(".html", 1)[0] + ".mobile.html"
>>>             try:
>>>                 get_template(template)
>>>             except TemplateDoesNotExist:
>>>                 return
>>>             else:
>>>                 view_kwargs["template"] = template
>>>
>>>         return view_func(request, *view_args, **view_kwargs)
>>>
>>> <snip>
>>>
>>>
>>> from django.shortcuts import *
>>>
>>> def index(request):
>>>     return render_to_response('testapp/test.html', {'user':request.user})
>>>
>>>
>>>
>>> Any clues?
>>>
>>>
>>> --
>>> Mvh/Best regards,
>>> Thomas Weholt
>>> http://www.weholt.org
>>
>>
>
> I can't imagine how you are expecting this to work. The template in your
> view is not a parameter, but is hard-coded into the call to
> render_to_response. Your code appears to be wanting to access the default
> value of a non-existent view parameter, modify it, and pass it back into a
> view that isn't expecting it.
>
> It seems like you want to make `template` a parameter to the view, and then
> your middleware could modify that.
> --
> DR.



-- 
Mvh/Best regards,
Thomas Weholt
http://www.weholt.org

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to