簡體   English   中英

如何在 django-filter 字段中使用小部件?

[英]How to use widgets in django-filter fields?

想要將小部件"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')

也嘗試在元類中編寫小部件,但沒有奏效。

  1. 哪個小部件用於CharFilter (就像我們在 Django 表單中使用forms.TextInput(attrs={'class':'form-control'}

  2. 哪個小部件用於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

鑒於您的評論...您需要加載模板標簽/過濾器,就像我假設您已經完成的靜態等。

只需在模板頂部放置一個{% load x %} htmlattributes從您放置的任何位置加載htmlattributes

要了解如何編寫自己的模板標簽和過濾器,可以在此處找到文檔; https://docs.djangoproject.com/en/3.1/howto/custom-template-tags/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM