Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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_Django Templates - Fatal编程技术网

Django 如何将验证错误传递给模板

Django 如何将验证错误传递给模板,django,django-templates,Django,Django Templates,我有一个IP验证规则,例如: >>> validate_ipv46_address("1.1.1") Traceback (most recent call last): File "<console>", line 1, in <module> File "/usr/local/lib/python2.7/site-packages/django/core/validators.py", line 125, in validate_ipv46_

我有一个IP验证规则,例如:

>>> validate_ipv46_address("1.1.1")
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/django/core/validators.py", line 125, in validate_ipv46_address
    raise ValidationError(_('Enter a valid IPv4 or IPv6 address.'), code='invalid')
ValidationError: [u'Enter a valid IPv4 or IPv6 address.']
不过有几件事我还不清楚。目前,如果我输入了不正确的IP,它仍然会将清理后的数据传回给我。那么,清理的_数据方法实际上是做什么的呢?另外,如何将任何验证错误传递回模板

谢谢,

根据您的代码应该可以工作并显示“表单顶部的错误消息”。但它不会在正确的输入元素中显示错误

你也可以尝试另一种方法。假设
validate\u ipv46\u address()
validate\u hostname()
只返回一个布尔值,而不是引发异常:

def clean(self):
    cleaned_data = super(CacheCheck, self).clean()
    record = cleaned_data.get("record")
    hostname = cleaned_data.get("hostname", "")

    if record == "PTR" and not validate_ipv46_address(hostname):
        msg = "Enter a valid IPv4 or IPv6 address."
    elif record == "A" and not validate_hostname(hostname):
        msg = "Enter a valid hostname."

    if msg:            
        self._errors["hostname"] = self.error_class([msg])
        del cleaned_data["hostname"]

    return cleaned_data
根据规则,您的代码应该工作并显示“表单顶部的错误消息”。但它不会在正确的输入元素中显示错误

你也可以尝试另一种方法。假设
validate\u ipv46\u address()
validate\u hostname()
只返回一个布尔值,而不是引发异常:

def clean(self):
    cleaned_data = super(CacheCheck, self).clean()
    record = cleaned_data.get("record")
    hostname = cleaned_data.get("hostname", "")

    if record == "PTR" and not validate_ipv46_address(hostname):
        msg = "Enter a valid IPv4 or IPv6 address."
    elif record == "A" and not validate_hostname(hostname):
        msg = "Enter a valid hostname."

    if msg:            
        self._errors["hostname"] = self.error_class([msg])
        del cleaned_data["hostname"]

    return cleaned_data

但是,如果您认为验证方法仅在未验证的情况下返回异常,则表示感谢。从我所看到的,您可以传递到模板的错误是来自实际表单字段的错误。但是,如果您认为验证方法仅在未验证的情况下返回异常,则表示感谢。从我所看到的可以传递到模板的错误是来自实际表单字段的错误。您确定验证程序正在运行吗?在clean方法中放入一些日志/打印语句,以确保
record
hostname
是您期望的值,并且
validate\u ip46\u address
方法实际运行。您确定验证程序正在运行吗?在clean方法中放入一些日志/打印语句,以确保
record
hostname
是您期望的值,并且
validate\u ip46\u address
方法实际运行。