Django-crispy-forms 将提交按钮放在不同的位置
Django-crispy-forms place Submit button in different location
我正在使用 Django-crispy-forms,我希望能够将“提交”按钮放置在不同于紧靠表单底部的位置。
这是我的表格:
from django import forms
from django.core.urlresolvers import reverse
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Layout, Button, Fieldset, ButtonHolder, Submit
from gpsim.models import GPSimConfig
class AddNewGPSimConfigForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(AddNewGPSimConfigForm, self).__init__(*args, **kwargs)
self.initial['name'] = ''
self.helper = FormHelper()
self.helper.form_id = 'add-new-gpsim-config'
self.helper.form_method = 'post'
self.helper.form_action = reverse('gpsim:add_gpsim_config')
self.helper.layout = Layout(
Fieldset(
'',
'name',
'other fields...',
),
ButtonHolder(
Submit('submit', 'Create', css_class='btn-default')
)
)
class Meta:
model = GPSimConfig
该模板是一个 Bootstrap 模态弹出窗口。模态最初显示一个表单,其中包含可供选择的 GPSimConfig 项目列表。当用户选择一个项目时,将通过 Jquery.
使用此表单加载跨度
在模态的底部,有一个取消按钮,我想把提交按钮放在取消按钮旁边的底部,但是当生成 crispy-form 时,它把提交按钮在最后一个字段之后关闭表单。
这是加载到模式 'modal-content' div 的模板。
{% extends "gpsim/tmpl_gpsim_modal_base.html" %}
{% load staticfiles %}
{% block modal-title %}Add GPSim Config{% endblock %}
{% block modal-body-left %}
Copy GPSim config from<br><br>
{% if my_gpsim_configs %}
My GPSim Configs<br>
<select id="my_gpsim_config_id" name="gpsim_config" class="form-control" onChange="load_span_from_select_change('my_gpsim_config_id','/gpsim/gpsim-config/add/?copy-from-id=', 'add_gpsim_config_span');">
<option>select</option>
{% for gpsim_config in my_gpsim_configs %}
<option value="{{gpsim_config.id}}">{{gpsim_config.name}}</option>
{% endfor %}
{% endif %}
{% endblock %}
{% block modal-body-right %}
<span id="add_gpsim_config_span"></span>
{% endblock %}
{% block modal-submit-button %}
<div id="submit-div">
</div>
{% endblock %}
跨度 "add_gpsim_config_span" 是通过 Jquery 加载表单的位置,提交按钮与表单结束标记一起放置在那里。我想将提交放在 "submit-div" div 中。
有办法吗?
首先,从 FormHelper
中删除 ButtonHolder(Submit())
按钮。
然后只需将按钮放入您的 submit-div
,例如:
<div id="submit-div">
<button class="btn btn-default">Submit</button>
</div>
并在点击按钮时使用 jQuery 提交表单:
$('#submit-div btn').click(function() {
$("#add-new-gpsim-config").submit();
});
我有这个完全相同的问题。在没有 jQuery 的情况下执行此操作的一种方法是在 __init__
中包含 self.helper.form_tag = False
。然后,在 'modal-content' 中编写您的表单标签,使其包含模态页眉、正文和页脚。看起来在你的情况下你必须为此使用嵌套块,但这是我的工作解决方案:
<div class="container">
<!-- Modal -->
<div class="modal fade" id="myModal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<form id="modal-form" action="{% url 'emailme' %}" class="form-horizontal emailme-form" method="POST">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4><span class="glyphicon glyphicon-envelope"></span> Email Me</h4>
</div>
<div class="modal-body">
<div class="modal-form">
{% csrf_token %}
{% crispy emailme_form emailme_form.helper %}
</div>
</div>
<div class="modal-footer">
<button type="submit" name="submit" value="submit" class="btn btn-success pull-right" id="submit-id-submit"><span class="glyphicon glyphicon-send"></span> Send</button>
</div>
</form>
</div>
</div>
</div>
</div>
我知道这是一个老问题。您可以通过为 ButtonHolder
指定 css_class
参数来包装按钮。例如,它的工作方式如下(与字段包装器一起):
self.helper.layout = Layout(
Div(*self.fields, css_class="modal-body"),
ButtonHolder(
Button('cancel', 'Cancel', css_class="btn btn-md btn-default",
data_dismiss="modal"),
Submit('submit', 'Create', css_class='btn-default'),
css_class="modal-footer")
)
)
我正在使用 Django-crispy-forms,我希望能够将“提交”按钮放置在不同于紧靠表单底部的位置。
这是我的表格:
from django import forms
from django.core.urlresolvers import reverse
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Layout, Button, Fieldset, ButtonHolder, Submit
from gpsim.models import GPSimConfig
class AddNewGPSimConfigForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(AddNewGPSimConfigForm, self).__init__(*args, **kwargs)
self.initial['name'] = ''
self.helper = FormHelper()
self.helper.form_id = 'add-new-gpsim-config'
self.helper.form_method = 'post'
self.helper.form_action = reverse('gpsim:add_gpsim_config')
self.helper.layout = Layout(
Fieldset(
'',
'name',
'other fields...',
),
ButtonHolder(
Submit('submit', 'Create', css_class='btn-default')
)
)
class Meta:
model = GPSimConfig
该模板是一个 Bootstrap 模态弹出窗口。模态最初显示一个表单,其中包含可供选择的 GPSimConfig 项目列表。当用户选择一个项目时,将通过 Jquery.
使用此表单加载跨度在模态的底部,有一个取消按钮,我想把提交按钮放在取消按钮旁边的底部,但是当生成 crispy-form 时,它把提交按钮在最后一个字段之后关闭表单。
这是加载到模式 'modal-content' div 的模板。
{% extends "gpsim/tmpl_gpsim_modal_base.html" %}
{% load staticfiles %}
{% block modal-title %}Add GPSim Config{% endblock %}
{% block modal-body-left %}
Copy GPSim config from<br><br>
{% if my_gpsim_configs %}
My GPSim Configs<br>
<select id="my_gpsim_config_id" name="gpsim_config" class="form-control" onChange="load_span_from_select_change('my_gpsim_config_id','/gpsim/gpsim-config/add/?copy-from-id=', 'add_gpsim_config_span');">
<option>select</option>
{% for gpsim_config in my_gpsim_configs %}
<option value="{{gpsim_config.id}}">{{gpsim_config.name}}</option>
{% endfor %}
{% endif %}
{% endblock %}
{% block modal-body-right %}
<span id="add_gpsim_config_span"></span>
{% endblock %}
{% block modal-submit-button %}
<div id="submit-div">
</div>
{% endblock %}
跨度 "add_gpsim_config_span" 是通过 Jquery 加载表单的位置,提交按钮与表单结束标记一起放置在那里。我想将提交放在 "submit-div" div 中。
有办法吗?
首先,从 FormHelper
中删除 ButtonHolder(Submit())
按钮。
然后只需将按钮放入您的 submit-div
,例如:
<div id="submit-div">
<button class="btn btn-default">Submit</button>
</div>
并在点击按钮时使用 jQuery 提交表单:
$('#submit-div btn').click(function() {
$("#add-new-gpsim-config").submit();
});
我有这个完全相同的问题。在没有 jQuery 的情况下执行此操作的一种方法是在 __init__
中包含 self.helper.form_tag = False
。然后,在 'modal-content' 中编写您的表单标签,使其包含模态页眉、正文和页脚。看起来在你的情况下你必须为此使用嵌套块,但这是我的工作解决方案:
<div class="container">
<!-- Modal -->
<div class="modal fade" id="myModal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<form id="modal-form" action="{% url 'emailme' %}" class="form-horizontal emailme-form" method="POST">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4><span class="glyphicon glyphicon-envelope"></span> Email Me</h4>
</div>
<div class="modal-body">
<div class="modal-form">
{% csrf_token %}
{% crispy emailme_form emailme_form.helper %}
</div>
</div>
<div class="modal-footer">
<button type="submit" name="submit" value="submit" class="btn btn-success pull-right" id="submit-id-submit"><span class="glyphicon glyphicon-send"></span> Send</button>
</div>
</form>
</div>
</div>
</div>
</div>
我知道这是一个老问题。您可以通过为 ButtonHolder
指定 css_class
参数来包装按钮。例如,它的工作方式如下(与字段包装器一起):
self.helper.layout = Layout(
Div(*self.fields, css_class="modal-body"),
ButtonHolder(
Button('cancel', 'Cancel', css_class="btn btn-md btn-default",
data_dismiss="modal"),
Submit('submit', 'Create', css_class='btn-default'),
css_class="modal-footer")
)
)