2017-04-07 109 views
0

我期待加入Django messages在我的形式,以顯示success message如果我的形式進行驗證,error message如果我的表單未通過驗證(丟失字段,數據類型的錯誤,...)Django的消息框架

我的錯誤信息非常完美,但是我的表單無效時,我無法克服在下一個模板中顯示我的成功消息。

這是我的看法:

def BirthCertificate_Form_unique_number(request) : 

validity = [] 
submission = [] 
#User fill some fields 
query_social_number = request.GET.get('social_number') 
query_social_number_father = request.GET.get('social_number_father') 
query_social_number_mother = request.GET.get('social_number_mother') 

success = False 

if request.method == 'POST': 

    form = BirthCertificateForm2(request.POST or None) 

    if form.is_valid() : # Vérification sur la validité des données 
     post = form.save() 
     messages.success(request, 'Le formulaire a été enregistré !') 
     return HttpResponseRedirect(reverse('BC_treated2', args=(messages,),kwargs={'id': post.id})) 

    else: 
     messages.error(request, "Le formulaire est invalide !") 

elif request.method == 'GET': 

    form = BirthCertificateForm2() 

    parent1 = Person.objects.filter(social_number=query_social_number_father) 
    parent2 = Person.objects.filter(social_number=query_social_number_mother) 

    if query_social_number : 
     if Person.objects.filter(social_number = query_social_number).exists() == True : 

      individu = get_object_or_404(Person, social_number = query_social_number) 
      messages.success(request, 'Le numéro unique existe !') 

      form.fields['fk_parent1'].queryset = parent1 
      form.fields['fk_parent2'].queryset = parent2 
      form.fields['lastname'].initial = individu.lastname 
      form.fields['firstname'].initial = individu.firstname 
      form.fields['birthday'].initial = individu.birthday 
      form.fields['birthcity'].initial = individu.birthcity 
      form.fields['birthcountry'].initial = individu.birthcountry 
      form.fields['sex'].initial = individu.sex 
      form.fields['social_number'].initial = individu.social_number 

     elif Person.objects.filter(social_number = query_social_number).exists() == False : 

      validity = False 
      messages.error(request, "Le numéro unique est invalide !") 


context = { 
    "form" : form, 
    "validity" : validity, 
    "submission" : submission 

} 

return render(request, 'BC_form2.html', context) 

,並在我的HTML模板:

{% for message in messages %} 
    <div class="alert {{ message.tags }} alert-dismissible" role="alert"> 
     <button type="button" class="close" data-dismiss="alert" aria-label="Close"> 
      <span aria-hidden="true">&times;</span> 
     </button> 
     {{ message }} 
    </div> 
{% endfor %} 

如何時,我的方式是有效的,我可以顯示成功的消息?

編輯:

我的urls.py文件:

from django.conf.urls import url 
from . import views 

urlpatterns = [ 
    url(r'^BC_accueil$', views.BirthCertificate_Home, name="BChome"), 
    url(r'^formulaire$', views.BirthCertificate_Form, name = "BCform"), 
    url(r'^formulaire2$', views.BirthCertificate_Form_unique_number, name = "BCform2"), 
    url(r'^formulaire_traite/(?P<id>\d+)/$', views.BirthCertificate_Resume, name="BC_treated"), 
    url(r'^formulaire2_traite/(?P<id>\d+)/$', views.BirthCertificate_Resume_unique_number, name="BC_treated2"), 
    url(r'^BirthCertificate_PDF/(?P<id>\d+)/$', views.BirthCertificate_PDF, name="PDF"), 
    url(r'^not_found$', views.BirthCertificate_notfound, name="BCnotfound"), 
] 
+0

看起來你還沒有把全面的瞭解你的問題。當表單無效時,你的視圖是否返回'HttpResponse'或'render'? –

+0

我添加了完整的視圖;)如果表單有效,我的視圖返回一個HttpResponse,否則呈現爲 – Deadpool

+0

爲什麼當表單有效時,將'messages'作爲參數傳遞給'reverse'函數?這不應該是必要的。 +您確定在settings.py中設置了消息上下文處理器嗎? –

回答

1

你需要知道一兩件事,messages將只執行一次。你爲什麼這樣做

args=(messages,) 

您可以訪問BC_treated2這些消息沒有把它當作args

+0

因爲我試過@Mubariz解決方案,我忘了刪除他的回答不工作^^ – Deadpool

+0

我的問題是:當我的形式是有效的,我有HttpRedirect到下一個模板,但是當我有HttpRedirect時,如何顯示Django消息成功? 這是我的問題^^ – Deadpool

+0

喜歡不傳遞消息作爲參數。改變你的觀點。那麼在'BC_treated2'中,你仍然從'django.contrib import messages'獲得'messages'作爲'' – itzMEonTV