Django-将属性值传递给TemplateView中的as_view

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__

knb*_*nbk 7

您正在中的类的实例上显式设置一个值__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)