【发布时间】:2016-01-29 17:34:03
【问题描述】:
我想让我的模式引导表单在提交按钮被触发时与 AJAX 一起工作。如果我可以推送提交并保留在模式表单页面上,那就太好了,无论是注册成功(在这种情况下,会给出感谢信息)或发生某种错误(在这种情况下,parsleyfy 会处理它)。
这些是我的文件。
-views.py
from django.shortcuts import render_to_response, render, redirect
from django.template import RequestContext
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required
from tentagarden.forms import UserForm, UserProfileForm
def home(request):
context = RequestContext(request)
registered = False
if request.method == 'POST':
user_form = UserForm(data=request.POST)
profile_form = UserProfileForm(data=request.POST)
if user_form.is_valid() and profile_form.is_valid():
user = user_form.save()
user.set_password(user.password)
user.save()
profile = profile_form.save(commit=False)
profile.user = user
if 'picture' in request.FILES:
profile.picture = request.FILES['picture']
profile.save()
registered = True
else:
print user_form.errors, profile_form.errors
else:
user_form = UserForm()
profile_form = UserProfileForm()
return render_to_response(
'tentagarden/home.html',
{'user_form': user_form, 'profile_form': profile_form, 'registered': registered},
context)
-home.html
{% extends "tentagarden/base.html" %}
{% load static %}
{% block content %}
<div class="panel-body">
<h1 id="home">Pack up your bag and go!</h1>
{% if user.is_authenticated %}
<h2>Welcome back, {{ user.username }}. Let's explore the World together!</h2>
{% else %}
<!-- Trigger the modal with a button -->
<h2><a id="myBtn">Subscribe now :)</a></h2>
<!-- Modal -->
<div class="modal fade" id="myModal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h3 class="modal-title">Register with Tent a garden</h3>
</div>
<div class="modal-body">
{% if registered %}
<h4>Tent a garden says: <strong>thank you for registering!</strong></h4>
<a href="/">Return to the homepage.</a><br />
{% else %}
<form data-parsley-validate id="user_form" method="post" action="" enctype="multipart/form-data">
{% csrf_token %}
{{ user_form.as_p }}
{{ profile_form.as_p }}
<input type="submit" id="submit" class="btn btn-info" name="submit" value="Register" />
</form>
{% endif %}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function(){
$("#myBtn").click(function(){
$("#myModal").modal();
});
});
</script>
<h2>Are you already a member? Then, <a href="/login/">login</a>!</h2>
{% endif %}
</div>
{% endblock %}
-forms.py
from django import forms
from django.forms import ModelForm
from tentagarden.models import UserProfile
from django.contrib.auth.models import User
from parsley.decorators import parsleyfy
@parsleyfy
class UserForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput())
first_name = forms.CharField(required=True)
last_name = forms.CharField(required=True)
email = forms.CharField(required=True)
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'password')
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ('website', 'picture')
我能做什么? 非常感谢!
【问题讨论】:
-
您当然可以做到这一点,而且看起来您在这里拥有大部分正确的作品。到目前为止,您的代码的哪一部分有效或无效?
-
一切正常。我点击“立即订阅”,jQuery 脚本触发 Bootstrap 模式窗口,订阅表单出现,用户注册工作完美无缺。唯一的问题是,当我单击“注册”按钮时,表单会消失并返回主页。一切正常,表单工作正常,但我想在模式窗口内显示成功/失败消息,然后 - 仅在此消息之后 - 提供返回主页的可能性。
标签: jquery ajax django forms bootstrap-modal