Exemplo n.º 1
0
 def wrapper(*args, **kwargs):
     acceptables = acceptable_media_types(request)
     acceptable = choose_media_type(acceptables, media_types)
     if acceptable is None:
         raise NotAcceptable()
     if not to is None:
         kwargs.update({to: acceptable})
     return fn(*args, **kwargs)
Exemplo n.º 2
0
 def wrapper(*args, **kwargs):
     acceptables = acceptable_media_types(request)
     acceptable = choose_media_type(acceptables, media_types)
     if acceptable is None:
         raise NotAcceptable()
     if not to is None:
         kwargs.update({to: acceptable})
     return fn(*args, **kwargs)
Exemplo n.º 3
0
    def __call__(self, data, template=None, status=200, headers=None,
                 renderers=None, ctx=None):
        """Render `_data` to response.

        :param data: rendering target.
        :param template: path for jinja template '.html' can be ommited.
        :param status: status code for HTTP response.
        :param headers: additional header informations.
        :param renderers: list of renderer will be used.  :cosnt:`None` to use
            default renderers
        :param ctx: context for template renderer.  defualt is
            `{'data':data}`

        :returns: rendered response
        :rtype: :class:`flask.Response`

        You can use it like::

            from flask.ext.negotiation import render

            @app.route('/')
            def view():
                data = get_data()
                return render(data)

        Or::

            from flask.ext.negotiation import render

            @app.route('/user/<uid>')
            def user_view(uid):
                user = get_user(uid)
                return render(user, 'user/read')

        Or::

            from flask.ext.negotiation import render
            from flask.ext.negotiation import provides

            @app.route('/new_content/')
            @provides(TemplateRenderer, 'application/json')
            def content_view():
                content = create_content()
                return render(content, 'content/read.html', 201, ctx={
                    'content':content,
                    'author':content.author,
                })

        """
        renderers = renderers or self.renderers
        media_types = acceptable_media_types(request)
        renderer, rendered_media_type = best_renderer(renderers, media_types)
        if renderer is None:
            abort(406)
        body = renderer.render(data, template, ctx)
        return Response(body, status, headers, unicode(rendered_media_type),
                        content_type=unicode(rendered_media_type))