python - Django 模板变量可以是模型实例吗?

标签 python django django-templates

我在一次采访中被问到这个问题,大概是为了看看我是否理解模板层和模型层之间的分离。

我的理解是模板变量本质上是:

  1. 实例的静态副本(以便可以访问所有属性)
  2. 所有带有参数的方法都被“隐藏”的实例(这样它们就不能被调用,但可以调用没有参数的方法)

因此,如果您有一个仅包含没有参数的方法的模型,并将一个实例传递到模板中,您能说它是该实例的静态副本吗?这是考虑模板变量的正确方法吗?

更新:

模板( View )层是否能够更新模型(例如,从自定义上下文处理器)?如果不是,那么如果 Django 框架不复制模型实例,它如何阻止这种情况发生?如果是,那么这是否与典型的 Web 框架 MVC 设计存在重大偏差,在典型的 Web 框架 MVC 设计中,数据仅沿从模型到 View 的一个方向流动?

最佳答案

问题不在于变量是静态副本。只是模板语言本身不允许您调用带有参数的方法。它仍然是您正在访问的同一对象,只是无法用语言表达某些编程概念(赋值、传递参数等)。

回复您的更新: 是的,如果模型具有修改对象的方法并且该方法不带任何参数,则模板层可以更新模型。但仅仅因为你可以做某事并不意味着你应该做某事。不要认为因为 Django 的开发人员没有完全阻止某些事情就意味着它是完全可以接受的,但如果那是您真正想做的,那么没有什么可以阻止您。

关于python - Django 模板变量可以是模型实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32508107/

相关文章:

django - Haystack 与 Elasticsearch : Unit test gets different results when run in isolation

python - Entry().get() 在 Python 3.4 中不起作用

django - REST 请求将协商哪个 `format`?

python - 如何使用 Django 表单字段使字符串在网页上可见

python - 模板中的Django外键关系

python - Django 中的消息中间件未显示在模板中

python - 如何在Python中查找不属于样本的值?

python - django-paypal 教程 : 'reverse' seems to be used incorrectly

python - 通过覆盖 __new__ 来装饰类方法不起作用?

python - Django - 在模板中设置变量(或调用参数为函数的 IF 语句)