【问题标题】:Django Context Processor and Form variablesDjango 上下文处理器和表单变量
【发布时间】:2011-09-26 04:43:50
【问题描述】:

我的 site_base.html 中有一个表单,它扩展到我的所有模板。

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

我曾考虑通过context processor 保留此信息,但我在编写将保留表单值的正确逻辑时遇到问题。

所以基本上当用户选择了他的角色时,我会使用 role_id 来填充我的网址,但我不能这样做,因为每当我点击一个新链接时,我都会得到一个 null 值,这要归功于我context_processor 中的逻辑。

我对 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>

naive 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}

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

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

    request.session['role_id'] = request.POST['role']
    

    然后你每次都可以在你的上下文处理器中获取实际的 Role 对象:

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

    【讨论】:

    • 是的......这就是我现在正在做的......除了我正在考虑使用中间件将用户的状态存储在会话中而不是上下文处理器或视图中。这样做的原因是因为用户的入口点可能不是我第一次设置会话变量的视图。
    猜你喜欢
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 2013-02-06
    • 2017-04-10
    • 1970-01-01
    相关资源
    最近更新 更多