Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在django templatetags中放置数据库交互的位置_Django_Django Templates - Fatal编程技术网

在django templatetags中放置数据库交互的位置

在django templatetags中放置数据库交互的位置,django,django-templates,Django,Django Templates,我正在编写一个简单的templatetag,它获取一个项并调用其中一个方法来获取和准备一些数据。我想知道我应该在哪里调用它,在节点中还是在编译器中? 谢谢你的建议 模板标记实际上不应该与数据库交互。至少不是在与模型/业务数据交互的意义上。这将违反关注点的分离,这是首先使用MVC(呃,MTV)风格框架的主要原因之一 如果您谈论的是一个数据驱动的模板标记,它由于某种原因与数据库交互,只处理表示级别的内容,那么它应该放在节点中的一个方法中,该方法在节点的render方法中调用 class MyCust

我正在编写一个简单的templatetag,它获取一个项并调用其中一个方法来获取和准备一些数据。我想知道我应该在哪里调用它,在节点中还是在编译器中?
谢谢你的建议

模板标记实际上不应该与数据库交互。至少不是在与模型/业务数据交互的意义上。这将违反关注点的分离,这是首先使用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层或模板标记。