Added documentation on view specific hooks

This commit sponsored by Matthew Woodward.  Thank you!
This commit is contained in:
Christopher Allan Webber 2013-05-14 16:09:55 -05:00
parent 5046ca2433
commit b312d2cd83

View File

@ -48,3 +48,65 @@ example might look like::
This means that when people enable your plugin in their config you'll This means that when people enable your plugin in their config you'll
be able to provide defaults as well as type validation. be able to provide defaults as well as type validation.
Context Hooks
-------------
View specific hooks
+++++++++++++++++++
You can hook up to almost any template called by any specific view
fairly easily. As long as the view directly or indirectly uses the
method ``render_to_response`` you can access the context via a hook
that has a key in the format of the tuple::
(view_symbolic_name, view_template_path)
Where the "view symbolic name" is the same parameter used in
``request.urlgen()`` to look up the test. So say we're wanting to add
something to the context of the user's homepage. We look in
mediagoblin/user_pages/routing.py and see::
add_route('mediagoblin.user_pages.user_home',
'/u/<string:user>/',
'mediagoblin.user_pages.views:user_home')
Aha! That means that the name is ``mediagoblin.user_pages.user_home``.
Okay, so then we look at the view at the
``mediagoblin.user_pages.views:user_home`` method::
@uses_pagination
def user_home(request, page):
# [...] whole bunch of stuff here
return render_to_response(
request,
'mediagoblin/user_pages/user.html',
{'user': user,
'user_gallery_url': user_gallery_url,
'media_entries': media_entries,
'pagination': pagination})
Nice! So the template appears to be
``mediagoblin/user_pages/user.html``. Cool, that means that the key
is::
("mediagoblin.user_pages.views:user_home",
"mediagoblin/user_pages/user.html")
The context hook uses ``hook_transform()`` so that means that if we're
hooking into it, our hook will both accept one argument, ``context``,
and should return that modified object, like so::
def add_to_user_home_context(context):
context['foo'] = 'bar'
return context
hooks = {
("mediagoblin.user_pages.views:user_home",
"mediagoblin/user_pages/user.html"): add_to_user_home_context}
Global context hook
+++++++++++++++++++