python - 如何在 django-filter 字段中使用小部件?
问题描述
想要将小部件设置
"class":"form-control"
为 django-filter 字段。
过滤器.py
from django_filters import FilterSet,DateFilter,CharFilter,DateFromToRangeFilter
from django_filters.widgets import RangeWidget,CSVWidget,DateRangeWidget
from django import forms
from .models import Blog
class BlogFilter(FilterSet):
start_date = DateFilter(field_name="created_at",lookup_expr='gte',label='From date',
widget=DateFromToRangeFilter(attrs={
'placeholder':'YYYY/MM/DD',
'class':'form-control'
})
)
end_date = DateFilter(field_name="created_at",lookup_expr='lte',label='To date')
blog_name = CharFilter(field_name="blog_name",lookup_expr='icontains',label='Blog Name',
widget=TextWidgets(attrs={
'class':'form-control'
})
)
class Meta:
model = Blog
fields = ('category','status','user')
也尝试在元类中编写小部件,但没有奏效。
用于哪个小部件
CharFilter
?(就像我们forms.TextInput(attrs={'class':'form-control'}
在 django 表单中使用的那样)用于哪个小部件
DateFilter
?
解决方案
我这样做的方法是使用模板过滤器。
所以在过滤器的模板中我会做这样的事情;
{% for field in filter.form %}
{{ field|htmlattributes:"class: form-control" }}
{% endfor %}
过滤器会这样做;
from django import template
register = template.Library()
@register.filter
def htmlattributes(value, arg):
""" Allows adding of attributes to tagged form elements. """
attrs = value.field.widget.attrs
components = arg.split(',')
for string in components:
key, values_string = string.split(':')
values = values_string.strip()
if attrs.get(key):
values = attrs.get(key) + ' ' + values
attrs.update({key: values})
rendered = str(value)
return rendered
鉴于您的评论...您需要加载模板标签/过滤器,就像我假设您已经完成的静态等一样。
只需将 a{% load x %}
放在模板顶部即可htmlattributes
从您放置的任何位置加载。
要了解如何编写自己的模板标签和过滤器,可以在此处找到文档;https://docs.djangoproject.com/en/3.1/howto/custom-template-tags/
推荐阅读
- vba - 使用高级过滤器填充用户表单中的列表框
- node.js - 如何将数据从节点服务器传递到 Angular 服务?
- django - base.html 中的 Django 脆表单
- loops - 如何在 Jinja2 中循环 Kannel 配置
- python - 如何获取 UTF-8 格式的电子邮件?
- android - Android shell 使用应用程序权限
- angular - 如何使用 AWS Apollo Angular 在 ionic 3 中实现离线支持?
- node.js - 如果您的服务器水平扩展并且您无法预测客户端请求的去向,您如何管理 CSRF 令牌?
- postgresql - 如何使用 Delphi 函数从数据库中返回数据?
- google-cloud-platform - 在 Node.js 上创建存储桶的问题