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.