2010-08-31 9 views
7

Ich verwende django generische Ansichten, wie bekomme ich Zugriff auf die Anfrage in meiner Vorlage.Django Generic View - Zugriff auf Anfrage

URLs:

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')), 
) 

Antwort

9

Nach etwas mehr suchen, während auf Menschen warten auf diese zu antworten. Ich fand:

Sie benötigen diese

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

Dies bedeutet, dass standardmäßig wird die Anforderung an alle Vorlagen geführt werden, um Ihre settings.py hinzuzufügen!

+3

nicht ganz richtig - es wird auf alle Vorlagen übergeben werden, die eine 'RequestContext' gemacht verwenden, die alle generischen Ansichten sind. –

+0

Dies funktionierte nicht für mich, mit Django 1,7 viereinhalb Jahre später. In der Tat haben die 1.7 Dokumente eine Warnung am Anfang von https://docs.djangoproject.com/en/1.7/ref/settings/ - "Seien Sie vorsichtig, wenn Sie Einstellungen außer Kraft setzen, besonders wenn der Standardwert ein nicht leeres Tupel ist B. MIDDLEWARE_CLASSES und TEMPLATE_CONTEXT_PROCESSORS. Stellen Sie sicher, dass Sie die Komponenten behalten, die für die Funktionen von Django erforderlich sind, die Sie verwenden möchten. Jedoch sehen Sie hier für eine Lösung: http://stackoverflow.com/questions/9899113/get-request-session-from-a-class-based-generic-view – Chirael

1

Was funktioniert für mich war hinzuzufügen:

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

Zum dem settings.py nicht auf die urls.py

3

Keine der gegebenen Antworten mein Problem gelöst, so dass für diese anderen, die gestolpert auf diesem wollen Zugriff auf das Request-Objekt innerhalb einer generischen Ansichtsvorlage können Sie so etwas wie dies in Ihrem urls.py tun:

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 
    ) 
) 

Prost!

3

Versuchen Sie es mit der Methode get_queryset.

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

siehe Link (hoffe, es hilft): - See Greg Aker's page...

+0

groß! Dies ist in Django sehr schlecht dokumentiert. Ich brauche genau die Anfrage obj. in der Listview-Unterklasse. – Timo