如何在类窗体__init__函数中读取会话语言

时间:2017-08-28 10:36:50

标签: python django

在我的Django项目中,我动态创建ContactsForm类的字段:

class ContactsForm(forms.Form): 
  def __init__(self, *args, **kwargs):
    super(ContactsForm, self).__init__(*args, **kwargs)

    self.fields['nome'].widget.attrs.update({
        'class' : 'form-control',
        'placeholder': 'your name *',
        'type': 'text'
        })
    [..]

在模板中:

[..]    
#set language
<a href="/language/it">ITA</a> - <a href="/language/en">ENG</a>
{% if session_language == 'it' %}
   [..]
{% else %}
   [..]
{% endif %}
<form id="contactForm" name="sentMessage" method='POST' action=''>{% csrf_token %}
  [..]
  <div class="form-group" >
   {{ form.nome }}
  </div>
  [..]
</form>

如何将session_language属性传递给ContactForm类,以便我可以将其用作标志来在意大利语和英语版本的字段之间切换?

 if lang == 'it':
  self.fields['nome'].widget.attrs.update({
        'class' : 'form-control',
        'placeholder': 'il tuo nome *',
        'type': 'text'
        })
 else:
  self.fields['nome'].widget.attrs.update({
    'class' : 'form-control',
    'placeholder': 'your name *',
    'type': 'text'
    })

感谢您提供任何帮助。

修改: 一发布问题,我意识到我可以简单地让模板根据session_language的值使用不同的ContactForm。在views.py中,我可以阅读request.session['lang']并根据lang值实例化不同的表单。

views.py

if request.session[`lang`] == 'it':
    form = ContactsForm()
else:
    form = ContactsForm_eng()

还有更优雅的方法吗?

1 个答案:

答案 0 :(得分:2)

按照access-the-request

你可以尝试:

class ContactsForm(forms.Form):
    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        super(ContactsForm, self).__init__(*args, **kwargs)
        self.lang = None
        if self.request:
            self.lang = self.request.session.get('lang')

在view.py

 form = ContactsForm(request=self.request)