将参数传递给 django as_view 函数

Pass parameter to django as_view function

我有一个 url 通过 as_view 函数传递参数:

url(
    r'^$',
    ChangeListView.as_view(
        columns=('username', 'email')
    ),
    name="user-list"
),

当我尝试访问视图中的列属性时,它 returns None 而不是我通过 url

传递的元组
class ChangeListView(generic.ListView):
    columns = None

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        print(self.columns)
        # Returns None instead of tuple
        return context

您没有任何可以根据您传入的数据实际设置 self.columns 的内容。

但这不是正确的做法。相反,将其作为 extra option 传递,并从 kwargs 访问它。

url(
    r'^$',
    ChangeListView.as_view(),
    {'columns': ('username', 'email')}
    name="user-list"
),

...

print(self.kwargs['columns'])

我对你的问题有点困惑 - 传递给 as_view 的任何参数都应该设置为视图实例的属性,因此 self.columns 应该设置为 ('username', 'email') .

(参见 Django's base View class 的来源)

但是,在这种情况下,context 变量(即您要返回的内容)应该None - 您传递给 as_view() 不影响从 self.get_context_data() 返回的内容(默认为 None)。也许你打算写 return self.columns?

另一方面,如果您的意思是 print(self.columns) 意外不打印任何内容,那么我不确定发生了什么。