【发布时间】:2015-09-10 17:22:48
【问题描述】:
我在一次采访中被问到这个问题大概是想看看我是否理解模板层和模型层之间的分离。
我的理解是,模板变量本质上是:
- 实例的静态副本(以便可以访问所有属性)
- 具有“隐藏”参数的所有方法的实例(这样它们不能被调用,但可以调用不带参数的方法)
因此,如果您有一个只有方法没有参数的模型并将一个实例传递给模板,您能说它是该实例的静态副本吗?这甚至是思考模板变量的正确方法吗?
更新:
模板(视图)层是否能够更新模型(例如,来自自定义上下文处理器)?如果不是,那么如果 Django 框架没有复制模型实例,它如何防止这种情况发生?如果是,那么这不是与典型的 Web 框架 MVC 设计的重大偏差,即数据仅沿一个方向从模型流向视图吗?
【问题讨论】:
-
问“Django 变量”是否是“模型实例”是没有意义的。如果您将模型实例传递给 Django 模板,那么是的,该变量是模型实例;但你也可以传递一个字符串、int、其他类实例或任何你喜欢的东西,模板变量就是那种类型。
-
不,将这些视为静态无方法副本是绝对错误的。
标签: python django django-templates