2012-03-07 60 views
3

我正在處理由i18n翻譯的多語言表單,並且發生了問題。Django - 錯誤後重置值

當我使用{{form.as_p}}生成表單並向窗體提供無效數據時,以前提供的數據不會從窗體中清除 - 而且我想在自定義窗體中使用相同的行爲一些領域翻譯。

這是我的自定義表單:

<div class=""> 
{{ form.subject.errors }} 
<input class="contact_form" id="id_subject" 
type="text" name="subject" 
onfocus="if(this.value=='{% trans "Title" %}') this.value=''" 
value="{% trans "Title" %}" 
maxlength="128" /> 
</div> 

我怎樣才能改變自己的行爲,因此不會出現錯誤後清理提供的數據?只有包含無效數據的字段才能從表單中刪除。

我在django文檔中找不到任何關於該問題的內容。

回答

3

桑德的答案是正確的,但如果可能的話,你應該儘量避免在模板中手動渲染你的表單域。

from django.utils.translation import ugettext_lazy, ugettext as _ 

class MyForm(forms.Form): 
    subject = Forms.CharField(initial=_("Title"), max_length=128)) 

然後你可以寫一些JavaScript來處理onfocus事件:在這種情況下,您可以在定義表單設置一個初始值。這是一個未經測試的片段,使用jQuery .focus()方法。

<script type="text/javascript"> 
$(function() { 
    $('#id_subject').focus(function() { 
    if (this.value == '{{ form.subject.initial }}') { 
     this.value = ''; 
    } 
    }); 
}); 
</script> 

您也可以嘗試passing the onfocus as a widget attribute。由於您使用的是可翻譯的字符串,這可能有點複雜 - 我認爲您可能必須在窗體的__init__方法中設置小部件。

+0

好吧,我按照你所說的使用ugettext做了。但是,我仍然不知道如何才能在表格領域「專注」。我需要更多的幫助。 – Efrin 2012-03-07 17:04:12

+0

我已經添加了一個jQuery代碼片段。我沒有時間去測試它,所以你必須自己調試它。祝你好運! – Alasdair 2012-03-07 17:23:29

+0

謝謝。我明天會檢查一下 – Efrin 2012-03-07 18:57:53

3

您可以將form.subject.value提供給輸入的值元素。

<div class=""> 
{{ form.subject.errors }} 
<input class="contact_form" id="id_subject" 
type="text" name="subject" 
onfocus="if(this.value=='{% trans "Title" %}') this.value=''" 
value="{% if form.subject.value %}{{ form.subject.value }}{% else %}{% trans "Title" %}{% endif %}" 
maxlength="128" /> 
</div> 
+0

這很有幫助,謝謝! – Efrin 2012-03-07 17:04:39