>> I've been trying to figure out how to use a custom subclased
>> RequestContext[1] object in my generic views.  Looking at the
>> code of django/views/generic/*.py it looks like this class is
>> hard-coded in each of the views.
>>
>> Ideally, I'd be able to set something in the settings.py to
>> specify my default RequestContext class, but I don't readily see
>> a way to go about that short of hacking the
>> django.templates.context module.
> 
> Generic views are using RequestContext by default;
> that's what's 'hardcoded' into generic views.

Yes, as noted in my 1st paragraph...I'm looking to circumnavigate 
this hard-coding. :-/

> Put this in the file myproject/mycomtextprocessor.py for example.
> Then you have to tell django that this is a context processor.
> You do it in the settings:
> 
> TEMPLATE_CONTEXT_PROCESSORS = (
>      'myproject.myapp.mycontextprocessor.get_someobjects',
> )

The catch is that (AFAICT) context processors only handle 
adding/merging content to the current context.  This would be the

  for processor in get_standard_processors() + processors:
      self.update(processor(request))

in the django/template/context.py definition of a RequestContext 
object.

My subclassed RequestContext object plans to intercept the 
Context.__getitem__ call (wherein redaction will hopefully happen 
in my custom subclass), and thus needs to be the actual object, 
not just a dict-like object merged into the existing 
RequestContext object.

My guess would be a patch that changes the

   c = RequestContext(...)

lines to be something like

   try:
     rc = settings.REQUEST_CONTEXT_OBJECT
   except:
     rc = RequestContext
   c = rc(...)

so I could have something like

   REQUEST_CONTEXT_OBJECT = MyRequestObject

in my settings.py file.

Unfortunately, I have two major hurdles:

1)  it's a rare request -- the standard RequestContext with the 
ability to merge in entries via context-processors, likely 
suffices for 99.9% of Django users.  Very few users have cause to 
want to intercept other methods of a Context object.

2)  we're staring down the gun at the 1.0 release and doing such 
changes will likely (and probably "rightly") be dismissed by the 
core developers as a "put it in a post-1.0 ticket and we'll think 
about it when we're less frenetic" reply.

Fortunately, I have the source, and am not overly daunted by 
patching my local version (as subversion/mercurial are pretty 
good about keeping my local changes and still updating from a 
remote source) of Django.

> I hope I understood the question right...

It was a good solution to the wrong problem :)

Thanks though,

-tim





--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to