在django templatetags中放置数据库交互的位置
我正在编写一个简单的templatetag,它获取一个项并调用其中一个方法来获取和准备一些数据。我想知道我应该在哪里调用它,在节点中还是在编译器中?在django templatetags中放置数据库交互的位置,django,django-templates,Django,Django Templates,我正在编写一个简单的templatetag,它获取一个项并调用其中一个方法来获取和准备一些数据。我想知道我应该在哪里调用它,在节点中还是在编译器中? 谢谢你的建议 模板标记实际上不应该与数据库交互。至少不是在与模型/业务数据交互的意义上。这将违反关注点的分离,这是首先使用MVC(呃,MTV)风格框架的主要原因之一 如果您谈论的是一个数据驱动的模板标记,它由于某种原因与数据库交互,只处理表示级别的内容,那么它应该放在节点中的一个方法中,该方法在节点的render方法中调用 class MyCust
谢谢你的建议 模板标记实际上不应该与数据库交互。至少不是在与模型/业务数据交互的意义上。这将违反关注点的分离,这是首先使用MVC(呃,MTV)风格框架的主要原因之一 如果您谈论的是一个数据驱动的模板标记,它由于某种原因与数据库交互,只处理表示级别的内容,那么它应该放在
节点中的一个方法中,该方法在节点的render
方法中调用
class MyCustomNode(template.Node):
def __init__(self, ...):
...
def render(self, context):
# do your db lookup here
return some_string_using_the_db_stuff
好的,谢谢。我一直在寻找避免直接获取视图中的数据的方法,因为它不应该因为调用此模型方法而打扰用户。但如果它应该在视图中调用,我会这样做。谢谢我不同意这一点。例如,如果您想在站点的多个页面上显示最新项目的边栏,该边栏与数据库交互,但最好的位置是在templatetag中。@Daniel我认为有一些方法可以做到这一点,您仍然不需要在templatetag代码中使用DB交互,但这也是为什么我在这里有一个警告——“最近的项目”并不是真的在数据库中进行查找,以确定如何呈现一些我担心的东西,对于OPRoseman来说可能是这样的情况,您也可以使用takes_上下文,并依赖上下文获得所需的数据,这将有助于分离主要关注点。我建议不要让模板标记查询数据库,而是显式地利用视图层将数据提供给UI层或模板标记。