DJANGO: HOW TO ENSURE THE FUNCTION NAME AND CONTEXT NAME ARE THE SAME FOR CONTEXT PROCESSING
We frequently write little functions that populate the Django context, and sometimes we want that context to be site-wide, and we want every page and every Ajax handler, basically everything that takes a request and spews a response, in our application to have access to that information. It might the user's authentication, or his authorization, or some profile information. Or it might be environmental: a site might have figured out what time it is on the user's site, and will adjust backgrounds and themes accordingly.
The context might be a simple variable. I have an example right here: is the browser you're using good enough? (I know, this is considered Bad Form, but it's what I have to work with) . The function has the simple name, need_browser_warning. The context key may as well have the same name. Using a constant for the context key is the usual pattern; this ensures the Django programmer won't get it wrong more than once, at least on the view side. (The template is another issue entirely. Set your TEMPLATE_STRING_IF_INVALID in settings.py!)
I wanted something more clever in my context processor. Here's sickly clever:
import inspect
def need_browser_warning(request):
return { inspect.currentframe().f_code.co_name:
not adequate_browser(request.META.get('HTTP_USER_AGENT')) }
Yeah, that's a little twisted. It guarantees that the name of the context key is "need_browser_warning", and the value is True or False depending upon what the function "adequate_browser" returns, which is what we want, so it's all good.
Obviously, this isn't good for everything. Some context processors handle many, many values. But for a one-key, this is a nifty way of ensuring name consistency.