Python 如何在django过滤器字段中使用小部件?
想要设置小部件Python 如何在django过滤器字段中使用小部件?,python,html,django,django-filter,Python,Html,Django,Django Filter,想要设置小部件 “类”:“表单控件” 到django筛选器字段 过滤器.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
“类”:“表单控件”
到django筛选器字段
过滤器.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
?(就像我们在django表单中使用forms.TextInput(attrs={'class':'form-control'}
)
日期过滤器
我这样做的方式是使用模板过滤器 因此,在过滤器的模板中,我会这样做
{% for field in filter.form %}
{{ field|htmlattributes:"class: form-control" }}
{% endfor %}
过滤器就是这样做的
来自django导入模板的
register=template.Library()
@寄存器过滤器
def htmlattributes(值,参数):
“”“允许向标记的表单元素添加属性。”“”
attrs=value.field.widget.attrs
components=arg.split(',')
对于字符串输入组件:
键,值\u string=string.split(“:”)
values=values\u string.strip()
如果属性获取(键):
values=attrs.get(键)+''+值
attrs.update({key:values})
渲染=str(值)
归还
根据您的评论…您需要加载模板标记/过滤器,就像静态等等一样,我假设您已经这样做了
只需在模板顶部放置一个{%load x%}
,即可从任何位置加载htmlattributes
要了解如何编写自己的模板标记和过滤器,可以在此处找到文档;
模板语法错误位于/blog/Invalid filter:'htmlattributes'
获得此信息error@AjayKhajindar你加载了吗?我建议你不要TemplateSyntaxError at/blog/'x'不是注册的标记库。必须是以下之一:admin\u listadmin\u modify admin\u url cache i18n l10n log rest\u framework static tz
不从任何模块加载。不是x
,这只是一个示例。你能用加载模块编辑你的答案吗?该模块用于加载html属性。我需要导入它吗?我尝试了这个{%load'htmlattributes%}
,但没有成功。