如何通过 django-crispy-forms 中的取消按钮重定向到 url?
Posted
技术标签:
【中文标题】如何通过 django-crispy-forms 中的取消按钮重定向到 url?【英文标题】:How to redirect to url by cancel button in django-crispy-forms? 【发布时间】:2016-02-14 08:03:59 【问题描述】:class StudentCreateView(CreateView):
model = Student
template_name = "students/students_edit.html"
form_class = StudentCreateForm
def get_success_url(self):
return u'%s?status_message=Студент успішно створений' % reverse('home')
def post(self, request, *arg, **kwargs):
if request.POST.get('cancel_button'):
messages.info(self.request, u"Створення скасовано")
return HttpResponseRedirect(
u'%s?status_message=Створення скасовано'
% reverse('home'))
else:
messages.success(self.request, u"Студент успішно створений")
return super(StudentCreateView, self).post(
request,*arg, **kwargs)
def get_context_data(self, **kwargs):
context = super(StudentCreateView, self).get_context_data(**kwargs)
context['meta'] = u'Додавання студента'
context['headtext'] = context['meta']
return context
在此视图中,如果单击取消按钮,我会检查发布功能
self.helper.layout[-1] = FormActions(
Submit('add_button',u'Зберегти', css_class='btn btn-primary'),
Submit('cancel_button', u'Скасувати'),
)
仅在 createview 提交取消时无法正常工作。单击时,它会尝试检查表单,并且当我想取消时,脆皮会回答我解决表单上的所有问题。我已将提交更改为按钮,而按钮取消完全没有效果。我在 *** 上找到了一个变体,向按钮添加了 onclick 方法,但它不适合我( 当我在重定向窗口信息消息上取消或发布表单时,会告诉我发布或取消的状态。因此,当我尝试 onclick 方法时,它会推送到过去的页面,因此未显示信息消息。 如何解决 CreateView 上的取消问题?
【问题讨论】:
【参考方案1】:添加Cancel
按钮并在onclick
事件中使用window.location.href
:
self.helper.add_input(Button('cancel', 'Cancel', css_class='btn-primary',
onclick="window.location.href = '';".format(reverse('your-cancel-url-name'))))
【讨论】:
如果需要进入详情页,请使用reverse('your-detail-page-url-name', args=[self.instance.id]) 【参考方案2】:如果您愿意,另一种方法是按原样传递 HTML:
from crispy_forms.layout import HTML
self.helper.layout = Layout(
Fieldset(
'Title',
'field1',
'field2',
'field3'
),
FormActions(
Submit('save', 'Save'),
HTML('<a class="btn btn-primary" href="/">Cancel</a>')
)
)
【讨论】:
【参考方案3】:self.helper.layout.append(
FormActions(
submit,
Submit('cancel_button', u'Скасувати', css_class="btn btn-link"),
)
)
【讨论】:
【参考方案4】:这很奇怪,但有效:
from crispy_forms.bootstrap import FormActions
from crispy_forms.layout import Fieldset, HTML, Layout, Submit
rows = [el for el in self.fields] # self == form
rows.append(
FormActions(
Submit('Save', _('Save')),
HTML(f'<a href="reverse("focov:choose-regulation")" class="btn btn-outline-secondary">_("Cancel")</a>'),
css_class="row"),
)
self.helper.layout = Layout(
Fieldset('', *rows),
)
【讨论】:
也许最新版本有新功能。以上是关于如何通过 django-crispy-forms 中的取消按钮重定向到 url?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不刷新页面的情况下使用 django-crispy-forms 实现引导模式表单
使用Ajax验证并提交Django表单(django-crispy-forms)
Django-crispy-forms:为 AppendedText 父 div 设置 CSS 类