diff options
| author | Chris McDonough <chrism@plope.com> | 2012-05-03 02:42:55 -0400 |
|---|---|---|
| committer | Chris McDonough <chrism@plope.com> | 2012-05-03 02:42:55 -0400 |
| commit | e012aa12760f6c29bfc9967c50a51d3f47db47da (patch) | |
| tree | ec5f73051a34d4835442c82c115fb91bb452d0ef /docs/narr | |
| parent | c1c2b6ad8e22f9cba291de8903edfa4c7c741dca (diff) | |
| download | pyramid-e012aa12760f6c29bfc9967c50a51d3f47db47da.tar.gz pyramid-e012aa12760f6c29bfc9967c50a51d3f47db47da.tar.bz2 pyramid-e012aa12760f6c29bfc9967c50a51d3f47db47da.zip | |
allow __json__ and custom adapters to accept request arg
Diffstat (limited to 'docs/narr')
| -rw-r--r-- | docs/narr/renderers.rst | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/docs/narr/renderers.rst b/docs/narr/renderers.rst index c36caeb87..57b5bc65b 100644 --- a/docs/narr/renderers.rst +++ b/docs/narr/renderers.rst @@ -241,7 +241,8 @@ Serializing Custom Objects Custom objects can be made easily JSON-serializable in Pyramid by defining a ``__json__`` method on the object's class. This method should return values natively JSON-serializable (such as ints, lists, dictionaries, strings, and -so forth). +so forth). It should accept a single additional argument, ``request``, which +will be the active request object at render time. .. code-block:: python :linenos: @@ -252,7 +253,7 @@ so forth). def __init__(self, x): self.x = x - def __json__(self): + def __json__(self, request): return {'x':self.x} @view_config(renderer='json') @@ -269,8 +270,7 @@ to the renderer is not a serializable type, and has no ``__json__`` method, usually a :exc:`TypeError` will be raised during serialization. You can change this behavior by creating a custom JSON renderer and adding adapters to handle custom types. The renderer will attempt to adapt non-serializable -objects using the registered adapters. It will raise a :exc:`TypeError` if it -can't determine what to do with the object. A short example follows: +objects using the registered adapters. A short example follows: .. code-block:: python :linenos: @@ -278,12 +278,19 @@ can't determine what to do with the object. A short example follows: from pyramid.renderers import JSON json_renderer = JSON() - json_renderer.add_adapter(datetime.datetime, lambda x: x.isoformat()) + def datetime_adapter(obj, request): + return obj.isoformat() + json_renderer.add_adapter(datetime.datetime, datetime_adapter) # then during configuration .... config = Configurator() config.add_renderer('json', json_renderer) +The adapter should accept two arguments: the object needing to be serialized +and ``request``, which will be the current request object at render time. +The adapter should raise a :exc:`TypeError` if it can't determine what to do +with the object. + See :class:`pyramid.renderers.JSON` and :ref:`adding_and_overriding_renderers` for more information. |
