Python Django上下文处理器和表单变量

Python Django上下文处理器和表单变量,python,django,django-forms,Python,Django,Django Forms,我的站点_base.html中有一个扩展到我所有模板的表单 在我的站点_base.html中,有一个下拉表单,允许用户更改其角色。根据所选角色,模板将发生更改 我曾想过通过上下文处理器来持久化这些信息,但我在编写正确的逻辑来持久化表单值时遇到了问题 因此,基本上,当用户选择了他的角色时,我使用role\u id来填充我的URL,但我不能这样做,因为每当我点击一个新链接时,由于我在上下文处理器中的逻辑,我将得到一个null值 我对Python和Django有点陌生,我不知道该怎么做 Github的

我的站点_base.html中有一个扩展到我所有模板的表单

在我的站点_base.html中,有一个下拉表单,允许用户更改其角色。根据所选角色,模板将发生更改

我曾想过通过
上下文处理器来持久化这些信息,但我在编写正确的逻辑来持久化表单值时遇到了问题

因此,基本上,当用户选择了他的角色时,我使用
role\u id
来填充我的URL,但我不能这样做,因为每当我点击一个新链接时,由于我在
上下文处理器中的逻辑,我将得到一个
null

我对Python和Django有点陌生,我不知道该怎么做

Github的帐户上下文切换器是一个很好的使用案例

站点_base.html中的表单

123             <form name="context" method="post" action="">{% csrf_token %}
124                 <div class="input_group">
125                     <select name="role" onchange="contextform();">
126                         <option value="none">Select Context</option>
127                         {% for role in request.user.get_or_create_profile.roles.all %}
128                         <option value="{{ role.id }}" {% ifequal role.id current_role.id %}selected="selected"{% endifequal %}>{{ role.name }} for {{ role.event }}</option>
129                         {% endfor %}
130                     </select>
131                 </div>
132                 {{ current_role }}
133             </form>

第一次设置值后,立即将其存储在会话中(在视图中,而不是上下文处理器中)

request.session['role_id'] = request.POST['role']
然后每次都可以在上下文处理器中获取实际的角色对象:

current_role = Role.objects.get(role_id=request.session['role_id'])

对这就是我现在正在做的。。除了我正在考虑使用中间件来存储会话中的用户状态,而不是上下文处理器或视图中的用户状态。这是因为用户的入口点可能不是我第一次设置会话变量的视图。
current_role = Role.objects.get(role_id=request.session['role_id'])