django 使用bootstrap3作为脆表单的模板包时出现TemplateDoesNotExist错误

1szpjjfi  于 2023-05-19  发布在  Go
关注(0)|答案(3)|浏览(323)

我正在为我的django项目使用django-crispy-forms,并在文档中阅读我看到,为了能够使用bootstrap 3功能(如水平表单),我需要将bootstrap 3设置为我的crispy模板包,在我的项目的www.example.com中添加以下行settings.py:

CRISPY_TEMPLATE_PACK = 'bootstrap3'

根据文档,crispy的默认配置是bootstrap v2。但是在我的设置中添加了bootstrap 3之后,当我在开发机器上运行我的应用程序时,我得到了这个错误:

TemplateDoesNotExist at /dashboard/
bootstrap3/field.html
Request Method: POST
Request URL:    http://localhost:8000/dashboard/
Django Version: 1.7.3
Exception Type: TemplateDoesNotExist
Exception Value:    
bootstrap3/field.html
Exception Location: C:\Python27\VirtualEnvs\Tlaloc\lib\site-packages\django\template\loader.py in find_template, line 136
Python Executable:  C:\Python27\VirtualEnvs\Tlaloc\Scripts\python.exe
Python Version: 2.7.7

如果我从我的设置中删除CRISPY_TEMPLATE_PACK行(使用默认值)或将其更改为如下所示:

CRISPY_TEMPLATE_PACK = 'bootstrap'

然后我就不会再得到错误了,但是表单水平类在我的表单中不起作用了。
这是我的表单在www.example.com中的样子forms.py

class UserForm(forms.Form):
    user = forms.CharField(label='Account', max_length=15)
    password = forms.CharField(widget=forms.PasswordInput())

    # Crispy forms code
    def __init__(self, *args, **kwargs):
        super(UserForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_class = 'form-horizontal'
        self.helper.label_class = 'col-sm-2'
        self.helper.field_class = 'col-sm-10'
        self.helper.layout = Layout(
            Fieldset(
                '',
                'user',
                'password',
            ),
            Div(FormActions(
                Submit('continue', 'Continue', css_class='btn btn-primary'),
                Button('cancel', 'Cancel', css_class='btn btn-default',
                       data_dismiss='modal'),
                ),
                css_class='modal-footer'
                )
            )

这是我的模板的一部分:

{% load crispy_forms_tags %}

<div class="modal fade" id="adAccountModal" tabindex="-1" role="dialog" aria-labelledby="authenticationLabel" aria-hidden="true">
            <div class="modal-dialog">
                <div class="modal-content">

                    <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                        <h4 class="modal-title" id="authenticationLabel">{{ config_values.environment_name }} Environment Authentication</h4>
                    </div>

                    <div class="modal-body">
                        <p>Please enter the account and password that will be used to authenticate in the selected environment.</p>
                        {% crispy user_form %}
                    </div>

                    {% comment %}
                    The footer will be added through the user_form using Crispy Forms.
                    The following code will be just left here as reference. 
                    <div class="modal-footer">
                        <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
                        <button type="button" class="btn btn-primary">Continue</button>
                    </div>
                    {% endcomment %}
                </div>
            </div>
        </div>

我做错了什么?

cidc1ykv

cidc1ykv1#

结果发现bootstrap3模板目录在我安装的crispy forms中不存在。
我的Windows系统上安装了Crispy Forms 1.3.2版。在github的项目页面中,我看到当前的版本,目前是1.4.0,确实有\crispy_forms\templates\bootstrap3目录。看起来bootstrap3模板包是在这个版本之前引入的,旧版本没有模板包。我升级到当前版本,它现在正在工作。

xurqigkl

xurqigkl2#

1.在settings.py文件中,包含以下内容:
CRISPY_ALLOWED_TEMPLATE_PACKS = ('bootstrap', 'uni_form', 'bootstrap3', 'foundation-5')
1.然后,在register.html中编写以下代码:

<!DOCTYPE html>

<!-- {% load static %} -->
<!-- {% load crispy_forms_tags %} -->

<html lang="en">

<head>

  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <meta name="description" content="">
  <meta name="author" content="">

  <title>Django CRM - Register</title>

  <!-- Custom fonts for this template-->
  <link href="{% static 'vendor/fontawesome-free/css/all.min.css' %}" rel="stylesheet" type="text/css">
  <link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">

  <!-- Custom styles for this template-->
  <link href="{% static 'css/sb-admin-2.min.css' %}" rel="stylesheet">

</head>

<body class="bg-gradient-primary">

  <div class="container">

    <div class="card o-hidden border-0 shadow-lg my-5">
      <div class="card-body p-0">
        <!-- Nested Row within Card Body -->
        <div class="row">
          <div class="col-lg-2 d-none d-lg-block"></div>
          <div class="col-lg-8">
            <div class="p-5">
              <div class="text-center">
                <h1 class="h4 text-gray-900 mb-4">Create an Account!</h1>
              </div>
              <form method="POST">
                {% csrf_token %}
                {{form|crispy}}
                <button type="submit" class="btn btn-primary">Submit</button>
              </form>
              <hr>
              <div class="text-center">
                <a class="small" href="#">Forgot Password?</a>
              </div>
              <div class="text-center">
                <a class="small" href="#">Already have an account? Login!</a>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>

  </div>

  <!-- Bootstrap core JavaScript-->
  <script src="{% static 'vendor/jquery/jquery.min.js' %}"></script>
  <script src="{% static 'vendor/bootstrap/js/bootstrap.bundle.min.js' %}"></script>

  <!-- Core plugin JavaScript-->
  <script src="{% static 'vendor/jquery-easing/jquery.easing.min.js' %}"></script>

  <!-- Custom scripts for all pages-->
  <script src="{% static 'js/sb-admin-2.min.js' %}"></script>

</body>

</html>
pftdvrlh

pftdvrlh3#

这个错误发生在我升级基础包时(Django 1.11到Django 3.2,Wagtail 2.0到Wagtail 2.16等)。我通过单独安装crispy_bootstrap3并将其包含在INSTALLED_APPS中来修复它。我还必须设置CRISPY_TEMPLATE_PACK = 'bootstrap 3',这很奇怪,因为我有另一个项目,使用最新版本的Django/Wagtail/Crispy Forms,我不需要做任何事情,我一直认为bootstrap是默认的模板包。听起来有点不确定,但如果你降级请评论。

$pip install crispy-bootstrap3

INSTALLED_APPS = [
...
    'crispy_forms',
    'crispy_bootstrap3',
...
]
...
CRISPY_TEMPLATE_PACK = 'bootstrap3'

相关问题