【问题标题】:django crispy form button not showingdjango 脆皮表单按钮不显示
【发布时间】:2013-12-06 08:19:02
【问题描述】:

我确信我很密集,但我花了几天时间试图找出我做错了什么。

我有

  • 已安装 django-crispy-forms(使用 pip)
  • 在我的设置中添加了“CRISPY_TEMPLATE_PACK”
  • 在我的应用程序中添加了“crispy_forms”
  • 从下载的 tar 文件中执行“collectstatic”(因为 pip 中不包含模板和 CSS)
  • 在我的表单 html 文件中添加了 '{%crispy_forms_tags %}
  • 从crispy_forms.helper 和crispy_forms.layout 导入到我的forms.py

我正在使用 Bootstrap 3,我直接编码而不是使用 bootstrap-toolkit

Bootstrap 在我的所有页面上都可以正常呈现,表单字段也是如此,但按钮不会出现。

我的html如下:

{% extends 'base.html' %}
{% load crispy_forms_tags %}

<html>

<title>Add Guest</title>


<div class='container'>
    {% block col1 %}
    <div class='row'>
        <div class="span3">
        {% endblock %} 
        {% block col2 %}
        <div class="span9">
            <ul>
                {% crispy form %}
            </ul>
        </div><!--/span9-->
        {% endblock %}
    </div><!--row-->
</div><!--/container-->

</html>

如果我将crispy 标签更改为 {% crispy MyForm MyForm.helper %} 我会得到“VariableDoesNotExist at”以及许多(真实)语言的连续性。如上所示,出现表单字段但不显示按钮。

我的 forms.py 看起来像这样:

from django.forms import ModelForm
from django import forms
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Fieldset, ButtonHolder, Submit
from .models import Author

class NewAuthorForm(forms.ModelForm):
    class Meta:
        model = Author
        # If you pass FormHelper constructor a form instance
        # It builds a default layout with all its fields
        helper = FormHelper()
        helper.form_method = 'post'
        helper.add_input(Submit('save', 'save', css_class = 'btn-primary'))

我知道这里在导入方面存在一些冗余,但我认为这不是问题。

最后,我的 base.html 是:

<!DOCTYPE html>
<html>
  <head>
    <title>Bootstrap 101 Template</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- Bootstrap -->
    <link href="{{ STATIC_URL }}css/bootstrap.min.css" rel="stylesheet">

    <!-- note that there’s also blue.uni-form.css and dark.uni-form.css available if you want to try chan-->
    <link rel="stylesheet" href="{{ STATIC_URL }}crispy_forms/static/uni_form/uni-form.css" type="text/css" />
    <link rel="stylesheet" href="{{ STATIC_URL }}crispy_forms/static/uni_form/default.uni-form.css" type="text/css" />
    <!-- uni-form JS library, optional -->
    <script src="{{ STATIC_URL }}crispy_forms/static/uni_form/uni-form.jquery.js" type="text/javascript"></script>


    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
      <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
        <div class='container'>
            {% block col1 %}
            <div class='row'>
                <div class="span3">
                {% endblock %} 
                {% block col2 %}
                <div class="span9">
                </div><!--/span9-->
                {% endblock %}
            </div><!--row-->
        </div><!--/container-->

    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://code.jquery.com/jquery.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="{{ STATIC_URL }}js/bootstrap.min.js"></script>
  </body>
</html>

我已将清晰的表单模板放在我的模板文件夹中,该文件夹与 manage.py 处于同一级别。正如我所说,所有引导程序都可以正常渲染。

我被难住了。任何想法都非常感谢

【问题讨论】:

  • 同样的问题 :( Django 1.6,crispy-forms 1.4
  • 我犯了一个编码错误@Juliusz。在表单的第一行中,我会输入“class NewAuthorForm(forms.ModelForm)”,而我应该输入“class NewAuthorForm(ModelForm)”,省略“forms”。
  • 我已经放弃了脆皮表格,现在已经尝试解决我的问题几个月了。可惜,这似乎是一个不错的选择。
  • 根据crispy documentationSome layout objects are specific to a template pack. For example ButtonHolder is for uni_form template_pack。如果您使用的是引导程序,也许这就是问题所在?

标签: python django twitter-bootstrap django-crispy-forms


【解决方案1】:

这是一个旧帖子,但如果我在搜索中找到它,很可能其他人会这样做。

我正在使用 Django 1.11.9 和 django-crispy-forms 1.7.0。您走在正确的轨道上,您实际上想在 init 中为类添加“提交”按钮,而不是在 Meta 中。

见下文:

from django.forms import ModelForm
from django import forms
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Fieldset, ButtonHolder, Submit
from .models import Author

class NewAuthorForm(forms.ModelForm):
    class Meta:
        model = Author

    def __init__(self, *args, **kwargs):
        super(NewAuthorForm, self).__init__(*args, **kwargs)
        # If you pass FormHelper constructor a form instance
        # It builds a default layout with all its fields
        self.helper = FormHelper()
        self.helper.form_method = 'post'
        self.helper.add_input(Submit('save', 'save', css_class = 'btn-primary'))

http://django-crispy-forms.readthedocs.io/en/latest/crispy_tag_forms.html#fundamentals

【讨论】:

    【解决方案2】:

    我完全不知道为什么,但不知何故删除了

    from __future__ import absolute_import
    

    从视图中为我解决了问题,现在我的按钮出现了。

    P.S 发现这个问题,在谷歌上搜索解决方案并决定注册并希望帮助下一个解决此类问题的人:)。

    【讨论】:

      猜你喜欢
      • 2020-08-21
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 2020-12-01
      • 2023-04-03
      • 2019-07-27
      相关资源
      最近更新 更多