2011-07-16 55 views
3

我想要使用ListView来避免为什么应该是一个相当简单的页面创建一个视图。 基本上我想列出一组与当前用户相关的对象,但是我不确定如何从urls.py中访问会话值。Django - 在urls.py访问会话

我有什么看起来像这样:

(r'^myrecords/$', ListView.as_view(
     queryset=Record.objects.filter(CURRENT LOGGED IN USER), 
     context_object_name='record_list', 
     template_name='records.html')), 

什么我需要做什么?

也有什么办法可以将login_required装饰器应用于此?

任何意见将不胜感激。

谢谢。

回答

4

请参阅文档dynamic filtering

您应该子类ListView并覆盖get_queryset方法。当调用基于类的视图时,self将填充当前请求(self.request)以及从URL中捕获的任何内容(self.argsself.kwargs)。

from django.views.generic import ListView 
from myapp.models import Record 

class MyRecordsListView(ListView): 
    context_object_name = 'record_list' 
    template_name = 'records.html', 

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

还有关于decorating class-based views的文档。基本上,你可以装点的as_view结果在urls.py

(r'^myrecords/$', login_required(MyRecordsListView.as_view())), 
+0

谢谢,这是非常有用的。 – Dan