首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用内联表单在django-crispy-forms中呈现字段错误

使用内联表单在django-crispy-forms中呈现字段错误
EN

Stack Overflow用户
提问于 2013-09-30 21:02:46
回答 3查看 14.4K关注 0票数 10

我在django_crispy_forms中使用bootstrap3作为默认的模板包,并尝试呈现一个带有crispy标签的表单:

代码语言:javascript
复制
{% crispy form %}

我的表单类有以下助手属性:

代码语言:javascript
复制
class TheForm(forms.Form):
    adv_var = forms.CharField(label="variable", max_length=70)
    value = forms.FloatField()

    def __init__(self, *args, **kwargs):
        super(TheForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper()

        self.helper.form_method = 'post'
        self.helper.form_class = 'form-inline'
        self.helper.field_template = 'bootstrap3/layout/inline_field.html'

        self.helper.layout = Layout(
            'adv_var', 'value',
            ButtonHolder(
                Submit('submit', 'Start', css_class='button white')
            )
        )

当发布包含错误的表单时,即使我可以在视图中打印form._errors并查看错误列表,重新呈现模板也不会显示错误。

如果我将helper.field_template更改为另一个值(或删除它以设置默认值),错误将显示在每个字段的上方-但我不再获得内联显示。

例如,如何使用django-crispy-forms在单独的div中显示此表单的所有错误?

EN

回答 3

Stack Overflow用户

发布于 2014-04-10 23:01:23

当表单有验证错误时,我们使用django.contrib.messages来推送一个通用的错误字符串,并保留字段errors进行内联呈现:

代码语言:javascript
复制
from django.contrib import messages
# ...
if not form.is_valid():
    messages.error(request, "Please correct the errors below and resubmit.")
    return render(request, template, context)

然后,我们使用bootstrap警告来显示所有消息,包括我们的通用错误,当然,您可以随心所欲地标记它。

但是,如果您只想将错误移动到单独的块中,请将它们添加到您的请求上下文中:

代码语言:javascript
复制
from django.contrib import messages
# ...
if not form.is_valid():
    context['form_errors'] = form.errors
    return render(request, template, context)

在您的模板中:

代码语言:javascript
复制
{% crispy form %}
<div id='form-errors'>{{ form_errors }}</div>

然后,您可以摆弄crispy form's helper attributes和样式来控制内联错误的显示。

票数 3
EN

Stack Overflow用户

发布于 2014-06-04 15:45:03

也许更简单的方法是下一种,因为它使用了更少的导入...

。。在视图中:

代码语言:javascript
复制
if request.method == 'POST':
    form = TheForm(request.POST)
    if form.is_valid():
        form.save()
        return redirect('url_name')
    else:
        form = TheForm()
    return render(request, 'form.html', {'form': form})

..。在表单中,您只需要:

代码语言:javascript
复制
{% load crispy_forms_tags %}
{% crispy form %}

..。其中'url_name‘是在urlpattern (urls.py )中定义的模式名称...这就是你真正需要的..。

Crispy是一个非常智能的系统。该系统知道如何才能直观地显示表单错误。

票数 1
EN

Stack Overflow用户

发布于 2021-12-13 17:03:22

app/views.py

代码语言:javascript
复制
from django.views.generic.edit import FormView
from django.urls import reverse_lazy
from .forms import MyForm

class MyFormView(FormView):
    template_name = 'app/myform.html'
    form_class = MyForm
    success_url = reverse_lazy('success_url')

app/templates/app/myform.html

代码语言:javascript
复制
{% load crispy_forms_tags %}
{% crispy form %}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19094974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档