Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Crispy表单、Twitter引导和表单内联的表单集_Django_Twitter Bootstrap_Django Crispy Forms - Fatal编程技术网

Django Crispy表单、Twitter引导和表单内联的表单集

Django Crispy表单、Twitter引导和表单内联的表单集,django,twitter-bootstrap,django-crispy-forms,Django,Twitter Bootstrap,Django Crispy Forms,我正在试验和Twitter引导,这是django crispy forms使用的默认模板包。我使用的是Django 1.4.5、Django crispy forms 1.2.3和Twitter Bootstrap 2.3.2 相关代码 url.py from django.conf.urls import patterns, url from core import views urlpatterns = patterns('', url(r'^$', views.Survey.as

我正在试验和Twitter引导,这是django crispy forms使用的默认模板包。我使用的是Django 1.4.5、Django crispy forms 1.2.3和Twitter Bootstrap 2.3.2

相关代码 url.py

from django.conf.urls import patterns, url
from core import views

urlpatterns = patterns('',
    url(r'^$', views.Survey.as_view(), name='survey'),
)
from django.views.generic.edit import FormView
from .forms import SurveyFormset


class Survey(FormView):
    form_class = SurveyFormset
    template_name = 'survey.html'
from django import forms
from django.forms.formsets import formset_factory
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit


class SurveyForm(forms.Form):
    def __init__(self, *args, **kwargs):
        self.helper = FormHelper()
        self.helper.form_action = '.'
        self.helper.form_class = 'form-inline'

        self.helper.add_input(Submit('submit', 'Submit'))
        super(SurveyForm, self).__init__(*args, **kwargs)

    name = forms.CharField(
        widget=forms.TextInput(attrs={'placeholder': 'Name'}),
        label='',
        max_length=50
    )

    favorite_food = forms.CharField(
        widget=forms.TextInput(attrs={'placeholder': 'Favorite food'}),
        label='',
        max_length=50
    )

    favorite_game = forms.CharField(
        widget=forms.TextInput(attrs={'placeholder': 'Favorite game'}),
        label='',
        max_length=50
    )

SurveyFormset = formset_factory(SurveyForm, extra=2)
视图.py

from django.conf.urls import patterns, url
from core import views

urlpatterns = patterns('',
    url(r'^$', views.Survey.as_view(), name='survey'),
)
from django.views.generic.edit import FormView
from .forms import SurveyFormset


class Survey(FormView):
    form_class = SurveyFormset
    template_name = 'survey.html'
from django import forms
from django.forms.formsets import formset_factory
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit


class SurveyForm(forms.Form):
    def __init__(self, *args, **kwargs):
        self.helper = FormHelper()
        self.helper.form_action = '.'
        self.helper.form_class = 'form-inline'

        self.helper.add_input(Submit('submit', 'Submit'))
        super(SurveyForm, self).__init__(*args, **kwargs)

    name = forms.CharField(
        widget=forms.TextInput(attrs={'placeholder': 'Name'}),
        label='',
        max_length=50
    )

    favorite_food = forms.CharField(
        widget=forms.TextInput(attrs={'placeholder': 'Favorite food'}),
        label='',
        max_length=50
    )

    favorite_game = forms.CharField(
        widget=forms.TextInput(attrs={'placeholder': 'Favorite game'}),
        label='',
        max_length=50
    )

SurveyFormset = formset_factory(SurveyForm, extra=2)
forms.py

from django.conf.urls import patterns, url
from core import views

urlpatterns = patterns('',
    url(r'^$', views.Survey.as_view(), name='survey'),
)
from django.views.generic.edit import FormView
from .forms import SurveyFormset


class Survey(FormView):
    form_class = SurveyFormset
    template_name = 'survey.html'
from django import forms
from django.forms.formsets import formset_factory
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit


class SurveyForm(forms.Form):
    def __init__(self, *args, **kwargs):
        self.helper = FormHelper()
        self.helper.form_action = '.'
        self.helper.form_class = 'form-inline'

        self.helper.add_input(Submit('submit', 'Submit'))
        super(SurveyForm, self).__init__(*args, **kwargs)

    name = forms.CharField(
        widget=forms.TextInput(attrs={'placeholder': 'Name'}),
        label='',
        max_length=50
    )

    favorite_food = forms.CharField(
        widget=forms.TextInput(attrs={'placeholder': 'Favorite food'}),
        label='',
        max_length=50
    )

    favorite_game = forms.CharField(
        widget=forms.TextInput(attrs={'placeholder': 'Favorite game'}),
        label='',
        max_length=50
    )

SurveyFormset = formset_factory(SurveyForm, extra=2)
survey.html

{% load crispy_forms_tags %}

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Survey</title>
        <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet">
    </head>
    <body>
        {% crispy form form.form.helper %}
    </body>
</html>
预期结果 因为TwitterBootstrap是django crispy forms用作默认模板包的东西,所以我希望它在默认情况下能够很好地处理这个问题。这些字段应该并排排列,而不是堆叠,显然有两种不同的形式

我希望HTML看起来像这样:

<form action="." class="form-inline" method="post">
    <div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='foo' /></div>

    <div>
        <input type="hidden" name="form-TOTAL_FORMS" value="2" id="id_form-TOTAL_FORMS" />
        <input type="hidden" name="form-INITIAL_FORMS" value="0" id="id_form-INITIAL_FORMS" />
        <input type="hidden" name="form-MAX_NUM_FORMS" value="1000" id="id_form-MAX_NUM_FORMS" />
    </div>

    <div id="id_form-0" class="control-group">
        <input type="text" id="id_form-0-name" class="textinput textInput" placeholder="Name" maxlength="50" name="form-0-name">
        <input type="text" id="id_form-0-favorite_food" class="textinput textInput" placeholder="Favorite food" maxlength="50" name="form-0-favorite_food">
        <input type="text" id="id_form-0-favorite_game" class="textinput textInput" placeholder="Favorite game" maxlength="50" name="form-0-favorite_game">
    </div>

    <div id="id_form-1" class="control-group">
        <input type="text" id="id_form-1-name" class="textinput textInput" placeholder="Name" maxlength="50" name="form-1-name">
        <input type="text" id="id_form-1-favorite_food" class="textinput textInput" placeholder="Favorite food" maxlength="50" name="form-1-favorite_food">
        <input type="text" id="id_form-1-favorite_game" class="textinput textInput" placeholder="Favorite game" maxlength="50" name="form-1-favorite_game">
    </div>

    <div class="form-actions">
        <input type="submit" name="submit" value="Submit" class="btn btn-primary" id="submit-id-submit" />
    </div>
</form>


我做错什么了吗?我应该怎么做才能得到预期的结果?

我也能够复制这个问题。虽然我对这种行为不是100%肯定,但我能从中找到以下几点:

#forms.py
定义初始化(self,*args,**kwargs):
self.helper=FormHelper()
self.helper.form_action='。'
self.helper.form_class='form inline'
self.helper.template='bootstrap/table\u inline\u formset.html'
self.helper.add_输入(Submit('Submit','Submit'))
超级(测量格式,自我)。\uuuu初始值(*args,**kwargs)
#views.py
从django.views.generic.edit导入FormView
from.forms导入SurveyFormset,SurveyForm
班级调查(FormView):
表格\类别=调查表格
模板名称='survey.html'
def get(自我、请求、*args、**kwargs):
self.object=None
form\u class=self.get\u form\u class()
表单=自我。获取表单(表单类)
formset=SurveyFormset()
返回self.render\u to\u响应(
self.get\u上下文\u数据(
形式=形式,
formset=formset,
)
)
def post(自我、请求、*args、**kwargs):
"""
处理POST请求,实例化表单实例及其内联
带有传递的POST变量的表单集,然后检查它们的
有效性
"""
self.object=None
form\u class=self.get\u form\u class()
表单=自我。获取表单(表单类)
formset=SurveyFormset(self.request.POST)
如果(form.is\u valid()和formset.is\u valid()):
返回self.form\u有效(表单,表单集)
其他:
返回self.form\u无效(表单,表单集)
def form_有效(self、form、formset):
"""
如果所有表单都有效,则调用。创建配方实例以及
关联的成分和说明,然后重定向到
成功页面。
"""
self.object=form.save()
formset.instance=self.object
formset.save()
返回HttpResponseRedirect(self.get_success_url())
def form_无效(self、form、formset):
"""
如果表单无效,则调用。使用
填写数据的表格和错误。
"""
返回self.render\u to\u响应(
self.get\u上下文\u数据(
形式=形式,
formset=formset,
)
)
#survey.html
{%load crispy_forms_tags%}
调查
{%crispy formset formset.form.helper'引导程序'%}
虽然我对使用divs的解决方案很好奇,因为django crispy forms文档说明它应该可以工作,但我可以确认这个解决方案在我的机器上可以工作。上述代码的一部分记入