Django/Python-views.py中不需要的实例缓存

Django/Python-views.py中不需要的实例缓存,python,django,python-3.x,django-templates,django-views,Python,Django,Python 3.x,Django Templates,Django Views,我对Django 2.1上运行的页面有问题。我的问题是,当从views.py调用函数来填充模板时,类的实例似乎被缓存。对该函数的每次后续调用/该页的每次刷新都会显示上一次调用该页/函数时的旧数据 有关守则: projectroot/myapp/templates/myapp/bar.html projectroot/myownpackage/DataTable.py 第一次加载此页面时,foo/bar.html似乎正是我想要的。我可以看到打印到页面上的列,以及该表中的几行。 如果刷新页面,则问题

我对Django 2.1上运行的页面有问题。我的问题是,当从views.py调用函数来填充模板时,类的实例似乎被缓存。对该函数的每次后续调用/该页的每次刷新都会显示上一次调用该页/函数时的旧数据

有关守则:

projectroot/myapp/templates/myapp/bar.html

projectroot/myownpackage/DataTable.py

第一次加载此页面时,foo/bar.html似乎正是我想要的。我可以看到打印到页面上的列,以及该表中的几行。 如果刷新页面,则问题可见。这就好像dt在函数返回渲染后被缓存一样

刷新页面时,您将看到第一个请求中的列和行被复制!如果我们第三次刷新,我们将看到第三组相同的行!数据表的这种追加会在刷新时进行多次。显然,dt在函数中实例化后被存储在这个函数之外,我不确定为什么会发生这种情况,或者是如何发生的

注意:只有行被反复添加。列保持不变。这是因为在表上设置列的同时添加行

我尝试过的事情:

在将dt分配给该return_dict之后,我尝试了dt=None和del dt。这两种方法都不起作用,刷新页面时会显示相同的结果

我对堆栈溢出的问题:

为什么在函数返回后,名为dt的DataTable实例没有被丢弃


如果出于任何原因,这是正常的,那么在处理完DataTable实例后,我该如何销毁它呢?

事实证明,问题是DataTable类中的DataRows是静态的。该类应如下所示:

class DataTable:

    def __init__(self):
        self.DataColumns = []
        self.DataRows = []

请显示DataTable,或者说它来自哪个包。@Alasdair我已经在后面添加了代码DataTable@Alasdair好主意,DataTable类一直是罪魁祸首!很高兴你明白了。当我看到self.DataRows.appenddata_row时,我认为问题可能出在DataTable类上。@Alasdair愚蠢的是,我从init开始就有这些,我不记得为什么我决定把它们拉出来!!!
#this is a relevant snippet from views.py
#There isn't anything outside of the functions, 
#with imports being the exception to this rule

import myownpackage.DataTable import DataTable

def list_page(request):
    template = 'foo/bar.html'

    connection = a_connection_here
    query_results = connection.get_query_results(sql_query_here)
    list_of_rows = [x for x in query_results]
    dt = DataTable()
    dt.DataColumns = [list_of_columns_here]
    for each_row in list_of_rows:
        dt.add(each_row)

    return_dict = {"MyTable": dt}

    return render(request, template, return_dict)
class DataTable:

    DataColumns = []
    DataRows = []

    def add(self, data_row):
        if len(self.DataColumns) != len(data_row):
            raise IndexError("Target column count does not match DataTable's DataColumn count.")
        else:
            self.DataRows.append(data_row)

    def remove(self, index):
        self.DataRows.remove(index)
class DataTable:

    def __init__(self):
        self.DataColumns = []
        self.DataRows = []