小编Jan*_*ngo的帖子

如何向请求添加属性,例如“用户”变量

我想创建一个始终可用的新变量,就像“用户”变量的工作方式一样。

这是我的 myapp/context_processors.py

def patient_selected(request):

print(hasattr(request, 'patient_selected_id'))
print( 'patient_selected_id' in locals())
print( 'patient_selected_id' in globals())

if not hasattr(request, 'patient_selected_id'):
    request.patient_selected_id = 0

return {"patient_selected_id": 0}
Run Code Online (Sandbox Code Playgroud)

问题是,它总是打印“假”。看来我无法向请求添加属性,也无法创建始终可用的变量。顺便说一句,我已将此 context_processors.py 添加到设置中。这是我的设置:

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
            'hrs.context_processors.patient_selected',
        ],
    },
},
Run Code Online (Sandbox Code Playgroud)

]

编辑:阅读源代码后,似乎该user变量实际上并不是创建一次并永远存在。中间件和 context_processoruser为每个请求添加一个变量,并且这个“用户”实际上是从会话中提取的。

我最初的设计是:一旦选择了一个病人,接下来的所有页面都是关于这个病人的。因此,我想让该患者的 ID 始终可用。我不想到处传递这个 ID,而是想将其保存(某处)一次并始终可用,直到选择另一个患者为止。

然而现在,考虑到变量的复杂性user,我可能会放弃这种花哨的方式。只需将此 id 作为参数放在每个请求 url 中应该会更容易。

django

5
推荐指数
1
解决办法
2802
查看次数

标签 统计

django ×1