尝试在 Django 中的表单上使用脆表单过滤器时收到“无效表单:脆”错误,但仅在一个 django 应用程序中而不是另一个?

Posted

技术标签:

【中文标题】尝试在 Django 中的表单上使用脆表单过滤器时收到“无效表单:脆”错误,但仅在一个 django 应用程序中而不是另一个?【英文标题】:Receiving 'invalid form: crispy' error when trying to use crispy forms filter on a form in Django, but only in one django app and not the other? 【发布时间】:2020-01-06 22:16:52 【问题描述】:

当尝试使用 crispy 过滤器时,我收到一个错误:

django.template.exceptions.TemplateSyntaxError:过滤器无效: '脆'

我相信这是因为Django 可能由于某种原因找不到脆皮过滤器,因为当我输入一个不存在的过滤器的名称时,我收到了同样的错误。

我在 html 文档的顶部使用了% load crispy_forms_tags %,并使用 form|crispy 来应用过滤器。我还在settings.py 文件中添加了'crispy forms'应用程序,并使用pip 安装了django-crispy-forms 包,使用pip freeze 可以清楚地看到它。

请注意,虽然我认为我没有更改该应用程序目录中的任何内容(但我可能错了,自从我在该目录中工作已经有一段时间了)。我无法弄清楚有什么不同。我阅读了一些关于附加到第一个应用程序目录的过滤器的信息,仅此而已,但该信息含糊不清,当我从使用它的模板中删除 % load crispy_forms_tags % 行时,脆过滤器仍然无法在新的应用程序。

这是模板。

% extends "breed_identifier/base.html" %
(% load crispy_forms_tags %)
% block content %
    <div class="content-section">
        <form method="POST">
            % csrf_token %
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Join Today</legend>
                 form|crispy 
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Sign Up</button>
            </div>
        </form>
        <div class="border-top pt-3">
            <small class="text-muted">
                Already Have An Account? <a class="ml-2" href="#">Sign In</a>
            </small>
        </div>
    </div>
% endblock content %

这是在我的 settings.py 文件中。

INSTALLED_APPS = [
    'users.apps.UsersConfig',
    'django.contrib.admin',
    'breed_identifier.apps.BreedIdentifierConfig',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'crispy_forms',
]

【问题讨论】:

请发布呈现表单的完整模板 - 这样我们就可以看到相对于表单本身加载过滤器的位置。 @solarissmoke 我在使用之前加载了过滤器,但按照您的建议发布了整个模板。 你有一个错字。您使用的是括号 (% load crispy_forms_tags %) 而不是大括号 % load crispy_forms_tags %,因此您实际上并没有加载脆标签。 这很尴尬@Alasdair。谢谢! 【参考方案1】:

我有同样的错误......你正在使用(),就像这样: (% 加载crispy_forms_tags %) 而不是 ,例如: % 加载crispy_forms_tags %

【讨论】:

【参考方案2】:

请务必将 % load crispy_forms_tags % 包含在部分内容中,例如:

% extends 'posts/bases/base.html' %
% load crispy_forms_tags %
% block title%
<title>Register</title>
% endblock %

% block content%
<h1>Register</h1>
<form action="" method="post">
% csrf_token %

 form|crispy 
<button type="submit">Register</button>
</form>

% endblock %

如果在base.html中加载就不行了

Django==3.1.4

django-crispy-forms==1.10.0

【讨论】:

【参考方案3】:

我遇到了同样的问题,但在我的模板顶部加载了清晰的 % load crispy_forms_tags % 表单后得到了解决

    % extends 'base.html' % % block content %
    % load crispy_forms_tags %

<div class="container">
  <div class="row">
    <div class="col-md-8 card mb-4  mt-3 left  top">
      <div class="card-body">
        <h1>% block title %  post.title  % endblock title %</h1>
        <p class=" text-muted"> post.author  |  post.created_on </p>
        <p class="card-text "> post.content | safe </p>
      </div>
    </div>
    % block sidebar % % include 'sidebar.html' % % endblock sidebar %

    <div class="col-md-8 card mb-4  mt-3 ">
      <div class="card-body">
        <!-- comments -->
        <h2> comments.count  comments</h2>

        % for comment in comments %
        <div class="comments" style="padding: 10px;">
          <p class="font-weight-bold">
             comment.name 
            <span class=" text-muted font-weight-normal">
               comment.created_on 
            </span>
          </p>
           comment.body | linebreaks 
        </div>
        % endfor %
      </div>
    </div>
    <div class="col-md-8 card mb-4  mt-3 ">
      <div class="card-body">
        % if new_comment %
        <div class="alert alert-success" role="alert">
          Your comment is awaiting moderation
        </div>
        % else %
        <h3>Leave a comment</h3>
    
        <form method="post" style="margin-top: 1.3em;">
           comment_form | crispy 
          % csrf_token %
          <button type="submit" class="btn btn-primary  btn-lg">Submit</button>
        </form>

        % endif %
      </div>
    </div>
  </div>
</div>
% endblock content %

【讨论】:

以上是关于尝试在 Django 中的表单上使用脆表单过滤器时收到“无效表单:脆”错误,但仅在一个 django 应用程序中而不是另一个?的主要内容,如果未能解决你的问题,请参考以下文章

django 脆表单:在表单中嵌套表单集

Django脆形式的if语句,条件表单布局

使用 Django 模型表单 + 表单向导 + Crispy - 不进行第二步

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

django 表单发布到另一个表单

Django Crispy 表单 - 更新视图的内联表单集“ManagementForm 数据”错误