[英]Django Context Processor and Form variables
我的site_base.html中有一个扩展到我所有模板的表单。
在我的site_base.html中,有一个下拉列表,允许用户更改其角色。 根据所选角色,模板会更改。
我曾经考虑过通过context processor
来保留此信息,但是在编写将保留表单值的正确逻辑时遇到了问题。
因此,基本上,当用户选择了他的角色时,我正在使用该role_id
填充我的网址,但我不能这样做,因为每当单击新链接时,由于context_processor
逻辑,我都会得到一个null
值。
我是Python和Django的新手,我不确定该怎么做?
野外的好用例是Github的帐户上下文切换器。
site_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>
天真的context.processor.py
3 def context_switcher(request):
4 """
5 Get a user's role
6 """
7 if 'role' in request.POST:
8 role_id = request.POST.get('role')
9 current_role = Role.objects.filter(id=role_id)[0]
10 else:
11 current_role = ''
12 return {'current_role': current_role}
首次设置该值后,将其存储在会话中(在视图中,而不是在上下文处理器中)。
request.session['role_id'] = request.POST['role']
然后,您可以每次在上下文处理器中获取实际的Role对象:
current_role = Role.objects.get(role_id=request.session['role_id'])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.