django 在模板中实现过滤器
Posted
技术标签:
【中文标题】django 在模板中实现过滤器【英文标题】:django implement filter on in template 【发布时间】:2018-03-01 10:54:41 【问题描述】:我正在构建一个界面(类似于 phpmyadmin),但对用户更友好...我已经导入了所有表格,但现在我想在每个表格上添加排序、过滤和搜索。
这是我的表格/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)
这是我的表格/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 ">«</a></li>
% else %
<li class="disabled"><span>«</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 ">»</a></li>
% else %
<li class="disabled"><span>»</span></li>
% endif %
</ul>
% endif %
% endblock %
我想在这个模板中进行排序、过滤和搜索,这对于我拥有的所有表格都是动态的。 (所有表结构相同)
我确实创建了一个单独的搜索模板...但这只是为了测试
提前感谢您的帮助
【问题讨论】:
【参考方案1】:其实拿到objects后,需要在views中写入filters
search
sort
,然后传入template。
当然,所有这些search
、sort
和filters
都有 bultin 函数,但您需要在视图中处理它们。
django 模板标签
还有用于其他用途的模板标签。你可以去Django Bultin Template Tags看看。
【讨论】:
我应该在同一个函数 (addview) 中编写过滤器、搜索和排序,然后当我渲染时……我还包括这 3 件事……还是我只用这些函数创建一个新函数3 件事分开并调用与函数 addview 相同的模板? 你可以同时做这两种方法,直到你做对为止。 非常感谢您的合作。如果您愿意,可以为我的回答点赞。以上是关于django 在模板中实现过滤器的主要内容,如果未能解决你的问题,请参考以下文章