2017-04-07 80 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