Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django-表单在发生错误后重置值_Django_Forms - Fatal编程技术网

Django-表单在发生错误后重置值

Django-表单在发生错误后重置值,django,forms,Django,Forms,我正在研究由i18n翻译的多语言表单,我遇到了一个问题 当我使用{form.as_p}生成表单并向表单提供无效数据时,前面提供的数据不会从表单中清除-我希望在自定义表单中有相同的行为,这些行为将转换一些字段 这是我的自定义表单: <div class=""> {{ form.subject.errors }} <input class="contact_form" id="id_subject" type="text" name="subject" onfocus="if(th

我正在研究由i18n翻译的多语言表单,我遇到了一个问题

当我使用{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>

{{form.subject.errors}
我如何修改它的行为,使它在发生错误后不会清理提供的数据?只有包含无效数据的字段才能从表单中删除


我在django文档中找不到关于该问题的任何内容。

您可以为输入的value元素提供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>

{{form.subject.errors}

Sander的答案是正确的,但如果可能,您应该尽量避免在模板中手动呈现表单字段。在这种情况下,您可以在定义表单时设置初始值:

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

class MyForm(forms.Form):
    subject = Forms.CharField(initial=_("Title"), max_length=128))
然后,您可以编写一些javascript来处理
onfocus
事件。下面是一个未经测试的代码段,使用jQuery方法


$(函数(){
$('id_subject')。焦点(函数(){
if(this.value=='{{form.subject.initial}}}'){
这个值=“”;
}
});
});

你也可以试试。由于您使用的是可翻译字符串,这可能有点复杂-我认为您可能必须在表单的
\uuuu init\uuuu
方法中设置小部件。

好的,我使用ugettext按照您所说的做了。然而,我仍然不知道如何为我的表单字段创建“onfocus”。我需要更多的帮助。我添加了一个jQuery代码片段。我没有时间测试它,所以你必须自己调试它。祝你好运谢谢我明天再查
<script type="text/javascript">
$(function() {
  $('#id_subject').focus(function() {
    if (this.value == '{{ form.subject.initial }}') {
      this.value = '';
    }
  });
});
</script>