1

我有注册功能,它显示在我项目中的每个页面上,使用context_processors.

如果我的表单在 base.html 的模式框中无效,如何显示错误?现在错误显示在:/register/子页面中。

视图.py

def UserRegistration(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect('/showcase/')
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            user = User.objects.create_user(username=form.cleaned_data['username'], email= form.cleaned_data['email'], password = form.cleaned_data['password'])
            user.save()
            klient = ClientProfile(user=user, name= form.cleaned_data['name'], address= form.cleaned_data['address'], zip_code=form.cleaned_data['zip_code'], city=form.cleaned_data['city'], tel= form.cleaned_data['tel'] )
            klient.save()
            return HttpResponseRedirect('/')

        return render_to_response('registration.html', {'form':form}, context_instance=RequestContext(request)) 

    else:
        form = RegistrationForm()
        context= {'form':form}
        return render_to_response('registration.html', context, context_instance=RequestContext(request))

context_processors.py

from content.forms import *

def include_register_form(request):
    form = RegistrationForm()
    return {'register_form':form}

base.html

<div class="modalBox" id="modalRegister">
   <div class="modalBox_iks"></div>
   <div class="titleShowcase">Register</div>
   <form method="POST" action="/register/">{%csrf_token%}
{{register_form}}
<input type="submit" value="Register"> 
</form>
</div> 

有可能的?

4

2 回答 2

2

您需要使用 Ajax 调用发布数据,在模式中显示错误需要 Ajax 调用。或者您可以使用第三方应用程序来启用 Ajax 表单验证

于 2013-06-10T12:17:08.673 回答
1

你用的是什么版本的django?如果您使用的是 django 1.5,请使用 FormView。

视图.py

class UserRegistration(FormView):
    template_name = 'form_registration.html'
    def render_to_response(self, context):

        if self.request.user.is_authenticated():
            return redirect('other_page')
        return super(UserRegistration, self).render_to_response(context)

    def form_valid(self, form):
        # Here you know that you form is valid
        user = User.objects.create_user(username=form.cleaned_data['username'], email=form.cleaned_data['email'], password = form.cleaned_data['password'])
        user.save()
        klient = ClientProfile(user=user, name= form.cleaned_data['name'], address= form.cleaned_data['address'], zip_code=form.cleaned_data['zip_code'], city=form.cleaned_data['city'], tel= form.cleaned_data['tel'] )
        klient.save()
        return redirect('home') #I'm not sure that this really redirect you

现在编写一个“form_registration.html”模板来显示错误。看这里

在你的'base.html'中

<div class="modalBox" id="modalRegister">
   <div class="modalBox_iks"></div>
   <div class="titleShowcase">Register</div>
   <form method="POST" id="ajax_form"action="/register/">{%csrf_token%}
    {% include "form_registration.html" with form=form %}
    <input type="submit" id="ajax_form_submit"value="Register"> 
    </form>
</div> 

现在,对于您的 ajax,您可以使用这个 jquery 插件。您可以设置“目标”选项以覆盖服务器响应

也许那个javascript可以帮助你:

<script>
    $('#modalRegister').click("#ajax_form_submit", function(event){
        event.preventDefault();
        $('#ajax_form').ajax_form(target:'#ajax_form').submit();
    })
</script>

我用过那个插件,很好用。

希望有帮助!

于 2013-06-10T13:55:12.610 回答