2011-03-04 23 views
5

Con vistas regulares, RequestContext puede acceder a variables como request.VARNAME:¿Cómo se leen las variables agregadas a RequestContext dentro de las vistas genéricas basadas en clases?

def example(request, template_name='stuff_list'): 
    return render_to_response(template_name, 
     {'stuff_list': get_list_or_404(Stuff, foo=request.DEBUG)}, 
     context_instance=RequestContext(request)) 

... en lugar de establecer context_instance que podría llamar basada en función de vista genéricodirect_to_template

Cómo hacer yo leer las variables agregadas a RequestContext dentro de class-based generic views ?

Por ejemplo:

class ArticleListView(ListView): 
    template_name = 'stuff_list' 
    bar = request.DEBUG # This won't work. What should I use instead? 
    queryset = get_list_or_404(Stuff, foo=bar) 


será reemplazado por class-based TemplateView de todos modos.
Ellos son nuevos en Django 1.3 y quiero usarlas porque sí.

Respuesta

7

Necesita utilizar una devolución de llamada - get_queryset() en este caso - en lugar de los atributos de clase. Los atributos de clase son realmente simples accesos directos cuando se controlan las opciones estáticamente, y están limitados a algunas cosas bastante simples. Cuando necesite hacer algo más complejo, en su lugar querrá cambiar a una devolución de llamada.

En su caso, el código como el siguiente debería funcionar:

class ArticleListView(ListView): 
    template_name = 'stuff_list' 

    def get_queryset(self): 
     return get_list_or_404(Stuff, foo=self.request.DEBUG) 

Para más detalles, see the documentation.

+0

Muchas gracias, las nuevas vistas genéricas basadas en clases hicieron que mi aplicación fuera aún más limpia y más pequeña. ¡El equipo de Django hizo un gran trabajo! –

6

RequestContext Los parámetros son también variables de contexto regulares. Debería poder hacer solo {{VARNAME}}

+2

+1 alguien puede no saber sobre esto, gracias! –

Cuestiones relacionadas