Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在django过滤器字段中使用小部件?_Python_Html_Django_Django Filter - Fatal编程技术网

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%}
    ,但没有成功。