在我的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()
还有更优雅的方法吗?
答案 0 :(得分:2)
你可以尝试:
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)