Omega
Omega

Reputation: 267

django implement filter on in template

i m buiding an in terface (something like phpmyadmin) but more userfriendly...i ve imported all tables but now i want to add sort,filter and search on every table.

this is my tables/views.py

def table_base(request):
    table_name = Crawledtables._meta.db_table
    list_tables = Crawledtables.objects.order_by('id')
    return render(request, 'tables/table_base.html', {'table_name': table_name,
                                                      'list_tables': list_tables})


class AboutDetail(DetailView):
    model = Crawledtables
    pk_url_kwarg = 'table_id'
    template_name = 'tables/table_list.html'

    def __init__(self, **kwargs):
        super(AboutDetail, self).__init__(**kwargs)

    def get_object(self):
        if 'table_id' not in self.kwargs:
            return Crawledtables.objects.get(id=1)
        else:
            return Crawledtables.objects.get(id=self.kwargs['table_id'])


def addview(request, table_id):
    table_name = Crawledtables.objects.get(id=table_id)

    tbl_details = "SELECT * FROM " + table_name.name
    tbl_detail = AllTables.objects.raw(tbl_details)

    paginator = Paginator(list(tbl_detail), 100)
    page = request.GET.get('page')

    try:
        details = paginator.page(page)
    except PageNotAnInteger:
        details = paginator.page(1)
    except EmptyPage:
        details = paginator.page(paginator.num_pages)

    crawled_tables = AllTablesFilter(request.GET, queryset=tbl_detail)
    return render(request, 'tables/table_list.html', {'tbl_name': table_name,
                                                      'details': tbl_detail,
                                                      'filter': crawled_tables,
                                                      'detail_page': details})


def GeneralSearch(request):
    table_list = Crawledtables.objects.all()
    crawled_tables = GeneralFilter(request.GET, queryset=table_list)
    return render(request, 'tables/table_search.html', {'filter': crawled_tables})


def AllTablesSearch(request, table_id):
    table_name = Crawledtables.objects.get(id=table_id)

    tbl_details = "SELECT * FROM " + table_name.name

    table_list = AllTables.objects.raw(tbl_details)
    # table_list = Crawledtables.objects.all()
    crawled_tables = AllTablesFilter(request.GET, queryset=table_list)
    return render(request, 'tables/alltables_search.html', {'tbl_name': table_name,
                                                            'filter': crawled_tables})

this is my tables/filter.py

class GeneralFilter(django_filters.FilterSet):
    class Meta:
        model = Crawledtables
        fields = ['name', 'date']


class AllTablesFilter(django_filters.FilterSet):
    class Meta:
        model = AllTables
        fields = ['id','title', 'url','description']

and my table_list.html

{% extends 'base.html' %}
{% block content %}
    {% load app_filter %}

<br>

    <h1> {{tbl_name|split:"_"}} {{ tbl_name.date|split:"-" }} Data</h1>
<table class="table table-bordered">
    <thead>
    <tr>
        <th>Id</th>
        <th>Title</th>
        <th>Url</th>
        <th>Descriptions</th>
    </tr>
    </thead>
        {% for lists in details %}
            <tr>
                <td>{{ lists.id }}</td>
                <td>{{ lists.title }}</td>
                <td><a href="{{ lists.url }}" target="_blank">{{ lists.url }}</a></td>
                <td>{{ lists.description }}</td>
            </tr>
    {% endfor %}
</table>

{% if detail_page.has_other_pages %}
  <ul class="pagination">
    {% if detail_page.has_previous %}
      <li><a href="?page={{ detail_page.previous_page_number }}">&laquo;</a></li>
    {% else %}
      <li class="disabled"><span>&laquo;</span></li>
    {% endif %}
    {% for i in detail_page.paginator.page_range %}
      {% if detail_page.number == i %}
        <li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
      {% else %}
        <li><a href="?page={{ i }}">{{ i }}</a></li>
      {% endif %}
    {% endfor %}
    {% if detail_page.has_next %}
      <li><a href="?page={{ detail_page.next_page_number }}">&raquo;</a></li>
    {% else %}
      <li class="disabled"><span>&raquo;</span></li>
    {% endif %}
  </ul>
{% endif %}


{% endblock %}

i want to have sort, filter and search in this template, that will be a dynamic for all tables that i have. (all tables have same structure)

i did create a separate search template...but that was just for testing

Thank you in advance for help

Upvotes: 1

Views: 81

Answers (1)

Astik Anand
Astik Anand

Reputation: 13057

Actually you need to write the , filters, search and sort in views after getting the objects and then you need to pass in template.

Offcourse, there are bultin functions for all these search, sort and filters but you need to process them in views.

django template tags

There are template tags for other things which serves various purposes. You can have a look on Django Bultin Template Tags.

Upvotes: 1

Related Questions