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

标签 python django django-templates

这是我的观点(简化):

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/

相关文章:

python - 修复在嵌入式 python 应用程序中导入 sklearn 时出现的明显递归错误

python - 简单的 python 算法没有按预期运行

python - 在 python 中,如何输入提示不是 str 或 bytes 而是序列的输入?

python - 如何删除XML文件中的重复元素

python - 在 django 中通过 SSO + OpenID 对 Google Apps 自定义域的用户进行身份验证

mysql - 在 Django 中, `class Meta:` 声明放在哪里重要吗?

python - Django:如何重新分发包含可扩展 HTML 模板的项目/应用程序?

python - Django 模板列表的第一个元素

python - Django 管理列表单击时更改 bool 值

javascript - 从 django 调用 javascript 函数