Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
Python 基本模板中的Django表单。如何显示验证错误?_Python_Django_Python 2.7_Django Forms - Fatal编程技术网

Python 基本模板中的Django表单。如何显示验证错误?

Python 基本模板中的Django表单。如何显示验证错误?,python,django,python-2.7,django-forms,Python,Django,Python 2.7,Django Forms,我使用Django 1.8.14。我在网站的每一页上都有搜索表单。我通过上下文处理器将Search表单传递给基本模板。每次表单将数据发送到/search/视图时。这是一个问题。Django在表单上引发ValidationError,但它不会显示在任何地方。当表单通过上下文处理器传递到基础模板并将数据发送到一个视图时,在模板中显示表单错误的正确方法是什么 form.py: class SearchForm(forms.Form): search = forms.CharField(requ

我使用Django 1.8.14。我在网站的每一页上都有
搜索
表单。我通过上下文处理器将
Search
表单传递给基本模板。每次表单将数据发送到
/search/
视图时。这是一个问题。Django在表单上引发
ValidationError
,但它不会显示在任何地方。当表单通过上下文处理器传递到基础模板并将数据发送到一个视图时,在模板中显示表单错误的正确方法是什么

form.py

class SearchForm(forms.Form):
    search = forms.CharField(required = True,
                          max_length=255,
                          widget = forms.TextInput({'class':'form-control', 'type':'search','required':''})
)

   def clean_search(self):
     search = self.cleaned_data.get("search")
     regex = myregex
     if not re.match(regex, search):
         print("ValidationError")
         raise forms.ValidationError(u'Please enter a valid value')
     return search
上下文处理器:

from myproject.forms import SearchForm

def form_context(request):
   context_dict = {}
   context_dict['search_form'] = SearchForm()
   return(context_dict)
我的基本模板:

 <form method="post" action="/search/">               
     {% csrf_token %}
     {{ search_form.non_field_errors }}
     {{ search_form.errors }}
     {{ search_form.search }}
     {{ search_form.search.errors }}        
     <button type="submit" class="btn btn-find">Search</button>
 </form>

一旦表单绑定到数据(POST请求)并经过验证,您需要传递表单;现在您的上下文只有一个空白表单,这就是没有显示错误的原因

from django.shortcuts import redirect

def search(request, template):
    search_form = SearchForm(request.POST or None, request.FILES or None)

    if search_form.is_valid():
       domen = search_form.cleaned_data['search']
       results = SitePage.objects.filter(domen=domen)
       if results.exists():
          return redirect('/{}/'.format(results.domen))

    return render(request, template, {'form': search_form})

一旦表单绑定到数据(POST请求)并经过验证,您需要传递表单;现在您的上下文只有一个空白表单,这就是没有显示错误的原因

from django.shortcuts import redirect

def search(request, template):
    search_form = SearchForm(request.POST or None, request.FILES or None)

    if search_form.is_valid():
       domen = search_form.cleaned_data['search']
       results = SitePage.objects.filter(domen=domen)
       if results.exists():
          return redirect('/{}/'.format(results.domen))

    return render(request, template, {'form': search_form})

如果Django正在以您希望的方式引发验证错误,而现在您只需要在
html模板上显示该验证错误,那么我想您需要的是Django消息


请参阅相同的官方文档->

如果Django提出了
验证错误
您希望它的方式,现在您只需要
html模板上显示该验证错误,那么我想您要找的是Django消息


查看相同的官方文档->

我看不出模板如何从您的
search
视图接收您的搜索。未填充上下文目录。。。这里是否还有一段代码没有显示?否则,将
context\u dict={“search\u form”:search\u form}
添加到视图函数可能会有所帮助。请从他们的网站上学习django教程,因为我不太明白为什么您要使用上下文处理器来将经过验证的表单传递给模板。我看不出模板如何从您的
search
视图接收您的搜索。未填充上下文目录。。。这里是否还有一段代码没有显示?否则,将
context\u dict={“search\u form”:search\u form}
添加到视图函数可能会有所帮助。请从他们的网站上学习django教程,因为我不太明白为什么您要使用上下文处理器来将经过验证的表单传递给模板。谢谢您的回答,这正是我需要的!很乐意帮忙。:)谢谢你的回答,这正是我需要的!很乐意帮忙。:)