2010-08-31 24 views
7

Estoy usando vistas genéricas de django, ¿cómo obtengo acceso a la solicitud en mi plantilla?Django Vista genérica - Acceso para solicitar

URL:

file_objects = { 
    'queryset' : File.objects.filter(is_good=True), 
} 
urlpatterns = patterns('', 
    (r'^files/', 'django.views.generic.list_detail.object_list', dict(file_objects, template_name='files.html')), 
) 

Respuesta

9

Después de un poco más de la búsqueda, a la espera de la gente para responder a esta. He encontrado:

es necesario agregar esto a su settings.py

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.request', 
) 

Esto significa que, por defecto la solicitud será transmitida a todas las plantillas!

+3

- será pasado a todas las plantillas que se representan mediante un 'RequestContext', que son todas las vistas genéricas. –

+0

Esto no funcionó para mí, usando Django 1.7 cuatro años y medio después. De hecho, los documentos 1.7 tienen una advertencia en la parte superior de https://docs.djangoproject.com/en/1.7/ref/settings/ - "Tenga cuidado al anular la configuración, especialmente cuando el valor predeterminado es una tupla no vacía o diccionario, como MIDDLEWARE_CLASSES y TEMPLATE_CONTEXT_PROCESSORS. Asegúrese de mantener los componentes requeridos por las funciones de Django que desea utilizar ". Sin embargo, consulte aquí para encontrar una solución: http://stackoverflow.com/questions/9899113/get-request-session-from-alass-based-generic-view – Chirael

1

Lo que funciona para mí fue añadir:

TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth", 
          "django.core.context_processors.request", 
          ) 

Para la settings.py el no a la urls.py

3

Ninguna de las respuestas dadas resuelto mi problema, así que para aquellos otros que tropezaron en este querer el acceso al objeto solicitud dentro de una plantilla de vista genérico se puede hacer algo como esto en su urls.py:

from django.views.generic import ListView 

class ReqListView(ListView): 
    def get_context_data(self, **kwargs): 
     # Call the base implementation first to get a context 
     c = super(ReqListView, self).get_context_data(**kwargs) 
     # add the request to the context 
     c.update({ 'request': self.request }) 
     return c 

url(r'^yourpage/$', 
    ReqListView.as_view(
     # your options 
    ) 
) 

Salud!

3

Pruebe usar el método get_queryset.

def get_queryset(self): 
    return Post.objects.filter(author=self.request.user) 

vea el enlace (espero que ayude): - See Greg Aker's page...

No es estrictamente cierto
+0

¡genial! Esto está muy mal documentado en Django. Necesito exactamente la solicitud obj. en la subclase Listview. – Timo

Cuestiones relacionadas