mor*_*h84 3 python django django-templates
这是我的观点(简体):
class MyView(TemplateView):
def __init__(self):
self.foo = 'bar'
super(MyView, self).__init__()
Run Code Online (Sandbox Code Playgroud)
这是在urls.py中:
url(
r'^/foo/$',
MyView.as_view(foo='baz'), name='my_view'
)
Run Code Online (Sandbox Code Playgroud)
运行此命令时,出现以下错误:
TypeError: MyView() received an invalid keyword 'foo'. as_view only accepts arguments that are already attributes of the class.
Run Code Online (Sandbox Code Playgroud)
为什么?我以为这样可以。:/
至少根据这篇文章:http : //reinout.vanrees.org/weblog/2011/08/24/class-based-views-walkthrough.html#class-view
如果我正确理解这一点,则应该将属性设置为传入foo的值。如果没有任何属性,则值应为。'baz'as_viewas_view'bar'__init__
您正在中的类的实例上显式设置一个值__init__()。但是,类本身仍然没有属性foo,因为它不知道实例的动态属性:hasattr(MyView, 'foo')始终返回False。
这将按您期望的代码那样工作:
class MyView(TemplateView):
foo = 'bar'
url(
r'^/foo/$',
MyView.as_view(foo='baz'), name='my_view'
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3020 次 |
| 最近记录: |