2012-03-14 3 views
1

J'ai un TemplateView qui renvoie un objet TemplateResponse dans un middleware middle_process_template, mais le dernier n'est jamais déclenché.Django middleware process_template_response pas triggerd

Lorsque je change la méthode middleware dans process_response et preform render() sur TemplateResponse, la méthode du middleware est déclenchée et la page est rendue.

Quelles étapes ai-je besoin de préformer pour afficher une vue dans un process_template_response?

Vue:

class PageView(TemplateView): 

    template_name = 'flatpages/default.html' 

    def get(self, request, *args, **kwargs): 
      url = kwargs['url'] 
      if not url.endswith('/') and settings.APPEND_SLASH: 
        return HttpResponseRedirect(url + '/') 
      if not url.startswith('/'): 
        url = url + '/' 
        kwargs.update({'url': url}) 
      context = self.get_context_data(**kwargs) 
      return self.render_to_response(context) 

    def get_context_data(self, **kwargs): 
      url = kwargs.pop('url') 
      context = super(PageView, self).get_context_data(**kwargs) 
      page = get_object_or_404(ParentPage, url__exact=url, sites__id__exact=settings.SITE_ID) 
      context.update({'flatpage': page}) 
      return context 

class PageFallbackMiddleware(object): 
    def process_template_response(self, request, response): 
      print 'Triggered' 
      if response.status_code != 404: 
        return response 
      try: 
        return PageView.as_view()(request, url=request.path_info) 
      except Http404: 
        return response 
      except: 
        if settings.DEBUG: 
          raise 
        return response 

Répondre

0

Je pense que vous pourriez avoir à retourner un TemplateResponse ou similaire pour le middleware pour acheminer le point de vue à un autre modèle, renvoyant le paramètre de réponse ou une autre instance HTTPResponse est un no-op.

Questions connexes