Python module for RESTful HTTP Content Negotiation
Latest commit 8bcd053 Feb 23, 2016 @martinblech Fix inaccurate code comment.
Default MIME for XML is now text/xml, not application/xml.
Failed to load latest commit information.
debian debian packaging Jul 15, 2009
examples completed docs with expected curl headers and output Jul 2, 2012
src Fix inaccurate code comment. Feb 23, 2016
.gitignore python + sphinx_build .gitignore Jun 29, 2012
.travis.yml drop py2.6 support (it's not supported by the python-mimeparse depend… Feb 1, 2016
README.markdown add copy of license, mention license in readme - #29 Jan 20, 2016 Bump version # to 0.6.0 Feb 23, 2016



mimerender is a Python module for RESTful HTTP Content Negotiation.

It acts as a decorator that wraps a HTTP request handler to select the correct render function for a given HTTP Accept header. It uses mimeparse to parse the accept string and select the best available representation.

Support for webapp2 (Google App Engine),, Flask and Bottle is available out of the box and it's easy to add support for your favourite framework, just extend the MimeRenderBase class.

Build status at Travis CI: Build Status

You can read the full documentation at

mimerender is released under the MIT License. A copy is included as LICENSE.

Example (Flask):

from flask import Flask
import json
import mimerender

mimerender = mimerender.FlaskMimeRender()

render_xml = lambda message: '<message>%s</message>'%message
render_json = lambda **args: json.dumps(args)
render_html = lambda message: '<html><body>%s</body></html>'%message
render_txt = lambda message: message

app = Flask(__name__)

    default = 'html',
    html = render_html,
    xml  = render_xml,
    json = render_json,
    txt  = render_txt
def greet(name='world'):
    return {'message': 'Hello, ' + name + '!'}

if __name__ == "__main__":

Then you can do:

$ curl -i -H "Accept: application/html" localhost:8080/x
$ curl -i -H "Accept: application/xml" localhost:8080/x
$ curl -i -H "Accept: application/json" localhost:8080/x
$ curl -i -H "Accept: text/plain" localhost:8080/x

and get results that make sense.

In the examples directory you will find examples for all the other supported frameworks.

How to get it

mimerender is in PyPI, so it's as easy as doing:

$ pip install mimerender