【问题标题】:Django form not showing-up inside Boostrap modalDjango 表单未在 Bootstrap 模式中显示
【发布时间】:2016-08-31 14:20:31
【问题描述】:

我已经为此苦苦挣扎了一个多星期,但没有成功。我有一个注册表,我想把它放在一个模式中。模态渲染得很好,标题、提交按钮,但注册表本身没有显示。

但是,当我在浏览器中访问 mysite/register 时,注册表单会完美呈现....但我不希望它在单独的选项卡中自行呈现,我需要它在模式中。

任何帮助将不胜感激。

这是我的代码:

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'),
)

注册.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' %}

【问题讨论】:

    标签: jquery python django twitter-bootstrap


    【解决方案1】:

    不确定您在帖子中的缩进是否是您在 views.py 文件中的内容,但至少这里是错误的并且表单没有被呈现。

    试试这个:

    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})
    

    【讨论】:

    • 我刚试过你的观点。表单仍然没有显示。
    • 您能否尝试呈现单个表单字段 {{ form.email }} 以确保您的 crispy 不会导致问题?
    • 好吧,也许问题出在您的表单上。您是否尝试在另一个模板中呈现表单?您是否能够在此 html 模板或其他模板中呈现其他表单?我经常使用模态窗口,我对标准 Django 表单没有任何问题。
    • 老兄,你是救生员!我找到了我认为的解决方案。我需要做的就是将我的表单添加到控制 home.html 的视图中。
    猜你喜欢
    • 2018-04-07
    • 2017-09-20
    • 2018-08-04
    • 1970-01-01
    • 2014-08-12
    • 2014-01-19
    • 2016-07-06
    • 2017-10-20
    • 2018-08-21
    相关资源
    最近更新 更多