如何在Django的urls.py中访问HttpRequest

5 投票
2 回答
2988 浏览
提问于 2025-04-16 10:51

基本上,我想用一个通用的视图来列出根据用户名显示的对象。现在,问题是,我该怎么做类似于:

(r'^resources/$',
  ListView.as_view(
    queryset=Resources.objects.filter(user=request.user.username),
    ...
  )
)

不过,我找不到访问 HttpRequest(请求)对象的方法……或者我需要自己写视图,在那里处理所有对象的选择吗?

2 个回答

4

你可以尝试创建一个子类,基于通用视图:

class PublisherListView(ListView):
    def get_queryset(self):
        return Resources.objects.filter(user=self.request.user.username)

然后你的网址配置看起来会像这样:

(r'^resources/$',
  PublisherListView.as_view(
    ...
  )
)

关于基于类的视图中动态过滤的更多信息,可以在这里找到: http://docs.djangoproject.com/en/dev/topics/class-based-views/#dynamic-filtering

3

如果你真的想直接在你的URL配置中添加很多内容,可以这样做:

(r'^resources/$',
 lambda request: ListView.as_view(queryset=Resources.objects.filter(user=request.user.username), ...)(request)
)

或者你可以通过创建一个视图的子类来访问请求:

class MyListView(ListView):
    def dispatch(self, request, *args, **kwargs):
        self.queryset = Resources.objects.filter(user = request.user.username)
        return super(MyListView, self).dispatch(request, *args, **kwargs)

撰写回答