簡體   English   中英

Django上下文處理器和表單變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM