这是我的观点(简化):
class MyView(TemplateView):
def __init__(self):
self.foo = 'bar'
super(MyView, self).__init__()
这是在 urls.py 中:
url(
r'^/foo/$',
MyView.as_view(foo='baz'), name='my_view'
)
当我运行它时,出现以下错误:
TypeError: MyView() received an invalid keyword 'foo'. as_view only accepts arguments that are already attributes of the class.
为什么?我认为这会奏效。 :/
至少根据这篇文章: http://reinout.vanrees.org/weblog/2011/08/24/class-based-views-walkthrough.html#class-view
如果我理解正确,这应该将属性 foo
设置为在 as_view
中传递的值 'baz'
。 as_view
中没有任何属性,该值应为 'bar'
,如 __init__
中所定义。
最佳答案
您在 __init__()
中为类的实例显式设置了一个值。但是,该类本身仍然没有属性 foo
,因为它不知道实例上的动态属性:hasattr(MyView, 'foo')
总是返回 错误
。
这会像您预期的代码那样工作:
class MyView(TemplateView):
foo = 'bar'
url(
r'^/foo/$',
MyView.as_view(foo='baz'), name='my_view'
)
关于python - Django - 将属性值传递给 TemplateView 中的 as_view,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24244245/