在一个应该支持多公司的系统中,我使用context_processors.py加载公司选项,从侧边栏中进行选择。用户可以随时更改公司。
当用户选择公司时,选项会被记录在会话变量中。
但是,在用户更改页面时,会话变量的信息会丢失。
我做错了什么或者没有做好?有更好的方法来解决这个问题吗?
相关的代码片段如下:
context_processors.py
当用户选择公司时,选项会被记录在会话变量中。
但是,在用户更改页面时,会话变量的信息会丢失。
我做错了什么或者没有做好?有更好的方法来解决这个问题吗?
相关的代码片段如下:
context_processors.py
from apps.client.models import Client
def units (request):
# Dictionary with business options
clients = Client.objects.values (
"client_id",
"company_id__name",
)
clients_list = []
for client in clients:
clients_list.append (
{
'client_id': client ['client_id'],
'name': client ['company_id__name']
}
)
return {'clients_list': clients_list}
base.html
# System base page.
# Displays the list of business options.
<select class = "form-control select2">
<option value = "{{request.session.unit_id}}"> {{request.session.unit_id}} </option>
{% for client in clients_list%}
<option value = "{{client.client_id}}"
{% if request.session.unit_id == client.client_id%}
selected
{% endif%}>
{{client.client_id}}
</option>
{% endfor%}
</select>
...
# Whenever a company is selected ...
<script>
$ ("# select_unit"). click (function () {
var option_id = $ (this) .val ();
var url = "{% url 'home: set_unit'%}";
$ .ajax ({
type: "GET",
url: url,
data: {'unit_id': option_id},
success: function () {}
});
});
</script>
view.py
# View that registers the variable in the session.
def set_unit (request):
unit_id = request.GET.get ("unit_id")
request.session ['unit_id'] = unit_id
settings.py
MIDDLEWARE = [
'apps.core.middleware.AppMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django_globals.middleware.Global',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'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',
'apps.home.context_processors.units',
],
},
}
]
set_unit
视图没有返回任何东西?我认为这可能是个问题。它叫什么名字? - dirkgrotenset_unit
视图。Django 只会在请求周期结束时,在中间件中保存会话。如果在此之前出现异常(这将发生,因为你的视图没有返回任何内容),会话将不会被保存。所以请回答我的第一个问题,而不是说你做得对。显然你做得不对,否则它就能正常工作了,不是吗? - dirkgroten