简体   繁体   中英

Django form not showing-up inside Boostrap modal

I've been grappling with this for over a week, with no success. I have a registration form I want to put inside a modal. The modal renders just fine, the title, submit button, but the registration form itself ins't showing.

However when I go to mysite/register in my browser, the registration form renders perfectly....but I don't want it to render by itself in a separate tab, I need it in a modal.

Any help would be greatly appreciated.

Here's my code:

forms.py

from django import forms
from apps.accounts.models import CustomUser


class RegistrationForm(forms.ModelForm):
    email = forms.EmailField(widget=forms.TextInput, label='email')
    username = forms.CharField(widget=forms.TextInput, label='username')
    password1 = forms.CharField(widget=forms.PasswordInput, label='Enter your password')
    password2 = forms.CharField(widget=forms.PasswordInput, label='Re-type your password')
    first_name = forms.CharField(widget=forms.TextInput, label='First Name')
    last_name = forms.CharField(widget=forms.TextInput, label='Last Name')

    class Meta:
        model = CustomUser
        fields = ['email', 'username', 'password1', 'password2', 'first_name', 'last_name']

    def clean(self, password1, password2):
        cleaned_data = super(RegistrationForm, self).clean()
        if password1 in self.cleaned_data and password2 in self.cleaned_data:
            if self.cleaned_data['password1'] != self.cleaned_data['password2']:
                raise forms.ValidationError("Passwords don't match. Please enter both fields again")
    return self.cleaned_data

    def save(self, commit=True):
        user = super(RegistrationForm, self).save(commit=False)
        user.set_password(self.cleaned_data['password1'])
        if commit:
            user.save()
        return user

views.py

def register(request):
    """
    User Registration View
    """
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            CustomUser = form.save()
            CustomUser.save()
            return redirect('home.html')
    else:
        form = RegistrationForm()
    return render_to_response('register.html', {
        'form': form,
    }, context_instance=RequestContext(request))

def get_profile(request, username):
    user = CustomUser.objects.get(pk=1).username

    return render_to_response(request, 'profile.html', {'username': username, 'user': user})

urls.py

urlpatterns = patterns ('', 
    url(r'register$', 'apps.accounts.views.register', name='register'),
    url(r'^profile/(?P<username>\w+/$)', get_profile, name='profile'),
)

register.html

{% load staticfiles %}
{% load crispy_forms_tags %}



{% block body %}

<div class="modal" id="modal-1">
            <div class="modal-dialog">
                <div class="modal-content">
                    <form enctype="multipart/form-data" method="post" action="">
                        <div class="modal-header">
                            <button type="button" class="close" data-dismiss="modal">&times;</button>
                            <h3 class="modal-title">Sign-up</h3>
                        </div>
                        <div class="modal-body">
                            {% csrf_token %}
                            {{ form|crispy }}
                        </div>
                        <div class="modal-footer">
                            <input type='submit' class="btn btn-primary" value="Register" />
                        </div>
                    </form>
                </div>
            </div>
</div>

{% endblock %}

base.html

.....
<li><a data-toggle="modal" data-target="#modal-1" href="">sign up</a></li>
{% include 'register.html' %}

Not sure if your indentation in your post is what you have in your views.py file but at least here is wrong and the form is not being rendered.

try this:

def register(request):
    form = RegistrationForm(request.POST or None)
    if request.method == 'POST':        
        if form.is_valid():
            CustomUser = form.save()
            CustomUser.save()
            return redirect('home.html')
    else:
        return render(request, 'register.html', {'form': form})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM