1

Django 使用他的表单API 进行输入验证。表单被发送到模板,并呈现为 html(as_p 和 friends)。

当用户准备好时,POST表单、数据被验证,如果表单无效,则在模板上重新呈现表单。

当表单因为字段上缺少足够的字符(即 min_length)或无效字符而无效时,这很奇怪:一个 POST 太多只是为了告诉用户它缺少一些非常基本的东西。

那么,是否有任何可用的方法(Django 或应用程序)使用 javascript 代码呈现表单,以“测试”[*] 客户端上的某些表单字段?即有一个呈现as_javascript(...)动态显示错误消息的表单,这些错误消息将由 form.errors 显示?

这不应该适用于所有字段,因为有些需要数据库命中,但它应该适用于简单(也是最常见的)字段,即 CharField、TextField 等。

[*] “测试”,因为验证也必须在服务器端进行。

4

1 回答 1

0

所以你想在提交之前在 JS 中验证一些东西。这是一种方法。与其在表单中放置提交类型的输入,不如放置一个按钮类型的按钮:

<form id="my-form" submit="...">
  ...        
  <input type='button' id='submit-button' value="Save">
</form>

请注意,除非您将类型指定为“按钮”,否则它仍会尝试提交。

然后在 JS 文件中编写类似这样的内容(在 HTML 文件中包含 jQuery):

$('#submit-button').click(function() {
  var errors = testErrors(); // this function tests for the errors.
  if (errors != "") {
    alert(errors);
  } else {
    $('#my-form').submit();
  }
}

示例 testErrors():

function testErrors() {
    var country         = $("#id_country").val();
    var city            = $("#id_city").val();

    var errors = "";
    if (country == "") {
        errors += "- Please select a country\n";
    }
    if (city.length <= 10 ) {
        errors += "- Your city name is too short\n";
    }
    return errors;
}

因此,在 testErrors 中,您可以为每个字段定义自己的测试。在此示例中,有两个,国家和城市。对于国家,代码测试它是否为空白,对于城市,它是否超过 10 个字符。您可以定义自己的进一步测试。请参阅 jQuery 文档以及如何从不同类型的表单字段中检索值。

于 2013-07-22T10:39:05.533 回答