一尘不染

Django基于类的视图:如何将其他参数传递给as_view方法?

django

我有一个基于类的自定义视图

# myapp/views.py
from django.views.generic import *

class MyView(DetailView):
    template_name = 'detail.html'
    model = MyModel

    def get_object(self, queryset=None):
        return queryset.get(slug=self.slug)

我想像这样传递slug参数(或其他参数到视图)

MyView.as_view(slug='hello_world')

我是否需要重写任何方法才能做到这一点?


阅读 869

收藏
2020-03-28

共2个答案

一尘不染

如果你的urlconf看起来像这样:

url(r'^(?P<slug>[a-zA-Z0-9-]+)/$', MyView.as_view(), name = 'my_named_view')

那么该子弹将在你的视图函数(例如“ get_queryset”)中可用,如下所示:

self.kwargs['slug']
2020-03-28
一尘不染

传递给该as_view方法的每个参数都是View类的实例变量。这意味着要添加slug作为参数,你必须在子类中将其创建为实例变量:

# myapp/views.py
from django.views.generic import DetailView

class MyView(DetailView):
    template_name = 'detail.html'
    model = MyModel
    # additional parameters
    slug = None

    def get_object(self, queryset=None):
        return queryset.get(slug=self.slug)

那应该MyView.as_view(slug='hello_world')起作用。

2020-03-28