I saw this in one of the previous Python newsletters (I think) and it looked pretty interesting: https://github.com/gregmuellegger/django-mobile
On Thu, Aug 9, 2012 at 9:29 AM, Thomas Weholt <thomas.weh...@gmail.com>wrote: > 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. > > -- 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.