2017-05-02 85 views
0

我在我的base.html上有一個表單,因爲我想在每個頁面上顯示它,我希望在表單無效時顯示驗證錯誤,問題是它將我重定向到我的視圖,即使它是驗證是假的,我拋出一個錯誤500Django:如果表單在base.html上無效,如何顯示錶單驗證錯誤?

在這裏,我是如何做到:views.py

def askProject(request): 
    if request.method == 'POST': 
     form = AskProjectForm(request.POST) 
     if form.is_valid(): 
      form.save() 

      return redirect(reverse('success-msg')) 
    else: 
     form = AskProjectForm() 

forms.py:

class AskProjectForm(forms.ModelForm): 
    class Meta: 
     model = AskProject 
     fields = ['prenom', 'nom', 'numero'] 

    def clean_prenom(self): 
     prenom = self.cleaned_data['prenom'] 
     if len(prenom) < 3: 
      raise ValidationError('Votre prénom doit etre plus long que 1 caractère.') 
     return prenom 
    ... 

context_processors.py:

from pages.forms import AskProjectForm 

def AskProjectFormProcessor(request): 
    return {'AskProjectForm' : AskProjectForm()} 

base.html文件:

<form method="post" action="{% url 'ask-project' %}"> 
    {% csrf_token %} 

    <div class="col-lg-4 col-md-4 col-sm-12 col-xs-12"> 
     <p>{{ AskProjectForm.prenom.errors }}</p> 
     <label for="prenom">Votre prenom<span class="form-required" title="Ce champ est requis.">*</span></label> 
     {{ AskProjectForm.prenom }} 
    </div> 
    ... 

    <div class="form-button col-lg-12 col-md-12 col-sm-12 col-xs-12"> 
    <button class="btn btn-default submit">C'est parti !</button> 
    </div> 
</form> 

我怎樣才能解決這個問題,因爲我不能使用戶(請求,...,{...} )在base.html?

我想返回到顯示錯誤驗證消息時用戶所在的頁面。

回答

1

您可以使用ajax請求(jQuery)發佈數據。 這不會導致重新加載或重定向到另一個頁面。 此外,如果表單中有任何錯誤,那麼也可以在前端進行驗證。 如果表單有效,那麼可以操縱響應對象,但是您關心。

+0

這就是我以爲做的! – Lindow

+0

jquery ajax請求對後臺api調用更敏捷,其中UI不需要被擾亂。 – zaidfazil