将参数传递给 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)
意外不打印任何内容,那么我不确定发生了什么。
我有一个 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)
意外不打印任何内容,那么我不确定发生了什么。