2017-09-20 9 views
1

私はphpMyAdminのようなものではなく、もっとユーザーフレンドリーなものをビルドしています...すべてのテーブルをインポートしましたが、今はすべてのテーブルに並べ替え、フィルター、検索を追加します。djangoはテンプレート内にフィルタを実装しています

これはこれは私がしたい私のテーブル/ 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'] 

と私の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 %} 

である私のテーブル/ 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}) 

ですこのテンプレートのソート、フィルター、検索は、私が持っているすべてのテーブルの動的なものになります。 (すべてのテーブルが同じ構造を持っている)

、実際には、filtersを記述する必要が私は別の検索テンプレートを作成していた...しかし、それはちょうど

をテストするためだったが、ヘルプ

答えて

1

のために事前にありがとうオブジェクトを取得した後でビュー内でsearchsortを入力し、テンプレートを渡す必要があります。

オフコースには、これらのすべてのための関数bultinがあります。searchsortおよびfiltersですが、それらをビューで処理する必要があります。

Djangoテンプレートタグ

様々な目的を果たす他のもののためのテンプレートタグがあります。 Django Bultin Template Tagsをご覧ください。

+0

同じ関数(addview)でフィルタを検索してソートしてから、レンダリングすると3つのものが含まれています...または3つのセパレータと呼び出しで新しい関数を作成しますか関数addviewと同じテンプレート? – Omega

+0

あなたはそれを正しく行うまで両方の方法を行うことができます。 –

+0

k助けてくれてありがとう – Omega

関連する問題