0

似乎模块变量与进程一样长,并且在进程重新启动之前不会重置。

这是我的代码,我希望它以另一种方式表现它现在的表现:

我有一个模块负责各种 SEO 功能,如面包屑和标题、文件 fancy/utils.py:

class Seo:
    title = ['project name']

稍后在我的视图中,我可以将项目添加到 Seo.title(例如 news.views):

from fancy.utils import Seo

def index(request, news_id):
    title.append('some specific title')
    ...

关键是变量Seo.title实际上不会在每次请求时重置,因此它会继续将项目附加到自身,这对我来说看起来很奇怪(因为我来自 PHP)。

最终,如果我在同一页面上按 F5,标题总是会变得又大又长。

发生了什么事,我该怎么办?

谢谢

4

2 回答 2

3

从您的评论看来,您完全误解了 Django 的执行模型。

您不能拥有可以从代码中的任何位置以某种方式访问​​的请求的本地数据。如果您需要与特定请求关联的数据,您应该将其存储在运行该请求的代码可以检索它的地方:可能在会话中,可能在添加到请求对象本身的临时字典中。您全局存储的任何内容都将是全局的:对在同一进程中运行的任何请求都是可见的。

于 2012-10-08T13:35:24.527 回答
1

title是一个类属性而不是一个instance属性。如果您想跨多个请求保留设置,您可以在会话中保留对它的引用。

例如

class Seo(object):
    def __init__(self):
        self.title = ['project name']

...

def index(request, news_id):
    seo = request.session.get('seo', Seo())
    seo.title.append('some specific title')
于 2012-10-08T12:08:14.223 回答