这周在开始逐步做一些前端的工作,主要是套bootstrap渲染。
不过碰到一个问题,因为Django后端给前端提供的form是直接{{form}}的形式,而bootstrap则是要求在html内修改class这样的操作来进行渲染的。
遇到这样的情况,就需要用到django-crispy-forms这个包
1:安装
pip install django-crispy-forms
然后在settings里面设置增加app
INSTALLED_APPS = [ …, ‘crispy_forms’,]
这里切记是下划线,不是中横杠,我写的时候填错了,还踩了个无法导入crispy_forms的坑。
最后还是在settings里面填上变量
CRISPY_TEMPLATE_PACK = ‘bootstrap4’ #用bootstrap来渲染django的默认模板内的forms
注意:这里也可以写作:CRISPY_TEMPLATE_PACK = ‘bootstrap3’。两个渲染效果差不多
2:使用-整体表单
接着,在你需要渲染的页面的顶端加入
{% load crispy_forms_tags %}
并且,在你需要渲染的form后面加上过滤 {{form|crispy}}
举例如下
{% extends 'scripts/base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<div class="container">
<form action="{% url 'users:register' %}" method="post" class="form-horizontal" role="form">
{% csrf_token %}
{{ form|crispy }}
<button name="submit" class="btn btn-primary">注册</button>
<input name="next" type="hidden" value="{% url 'scripts:index' %}">
</form>
</div>
{% endblock content %}
3:单个字段
如果你只是想针对某个字段进行渲染,也是可以的
那你就在渲染的表单时候把字段单独拿出来,如下
{{form.title|as_crispy_field}}
性质和上面整体渲染是一样的