我使用 semantic-ui 作为 crispy-forms 的模板。尝试加载页面时会导致以下错误:
模板语法错误位于 /forum/newpost/pqs53kqsbgsqd66pg0i60u-isjtvagbo4ii4q9/
crispy 标签的 template_pack 参数应该位于 ('bootstrap', 'uni_form', 'bootstrap3', 'foundation-5')
设置文件包含以下条目(除其他外):
CRISPY_TEMPLATE_PACK = 'semantic-ui'
INSTALLED_APPS = ('crispy_forms', 'semantic_ui')
这是来自forumpost_create.html的模板代码:
{% extends 'forum/layouts/forum_main.html' %}
{% load crispy_forms_tags %}
{% block content %}
<div class="ui main text container">
<form action="" method="post" class="ui form">
{% csrf_token %}
{% crispy form %}
<input type="submit" value="Save" />
</form>
</div>
{% endblock %}
当我在
template中使用
form|crispy
时,错误消失,但模板渲染后不受影响,即使查看输出 HTML 源代码,也没有任何更改。
代码来自forms.py
class ForumPostForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ForumPostForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.layout = Layout(
Fieldset(
'Post body',
'body'
),
ButtonHolder(
Submit('submit', 'Submit', css_class='ui primary button')
)
)
class Meta:
model = ForumPost
fields = ['body']
如何使其发挥作用?是因为我正在使用 semantic-ui 并且需要做一些不同的事情吗? (我遇到的大多数教程都更喜欢bootstrap)。
您需要将semantic-ui添加到设置文件中的CRISPY_ALLOWED_TEMPLATE_PACKS中
CRISPY_ALLOWED_TEMPLATE_PACKS = ('bootstrap', 'uni_form', 'bootstrap3', 'bootstrap4', 'semantic-ui')
更新您的
settings.py
文件:
CRISPY_TEMPLATE_PACK
设置并获取其值。CRISPY_ALLOWED_TEMPLATE_PACKS
的元组中,如下所示:CRISPY_TEMPLATE_PACK = "Bootstrap5"
CRISPY_ALLOWED_TEMPLATE_PACKS = ("Bootstrap5",)
如果您希望允许使用其他模板包,您也可以将它们包含在元组中:
CRISPY_ALLOWED_TEMPLATE_PACKS = ("Bootstrap4", "Bootstrap5", "uni_form")
调整您的模板代码:
{{ form|crispy }}
的实例替换为 {% crispy form %}
。此设置可确保您的项目配置为使用带有 django-crispy-forms 的 Bootstrap 5 模板,并且更新的模板标签可以正确呈现您的表单。