Django模板初始如何不加载Product模型 点击筛选按钮后再展示数据
实现方法
完全可以实现,只需要调整视图里的get_queryset逻辑,初始无筛选参数时不查询Product表即可,不会影响你现有筛选、分页的功能。
核心逻辑
- 页面首次访问、请求中没有携带有效
filtr筛选参数时,直接返回Django ORM提供的空查询集Product.objects.none(),这个查询集不会触发任何数据库查询,不会加载任何Product表的记录,页面初始状态无数据展示。 - 只有用户点击筛选按钮、请求携带了非空的
filtr参数时,才调用你已经写好的barcode_filter方法查询符合条件的记录,走正常的分页、数据渲染逻辑。
调整后的视图代码
class barcodeview(ListView): template_name = "barcode/table.html" paginate_by = '500' model = Product context_object_name = 'product' # Queryset for filtering product model def get_queryset(self): filtr_val = self.request.GET.get("filtr", "").strip() # 无有效筛选参数时返回空查询集,不查询数据库 if not filtr_val: return Product.objects.none() # 存在筛选参数时执行筛选查询 queryset = Product.objects.barcode_filter( filtr = filtr_val, ) return queryset
模板适配建议
可以在模板中加一层判断,初始无数据时展示操作提示,避免页面空白让用户误解:
{% if not product %} <p>请选择筛选条件后点击查询按钮,即可展示对应商品数据</p> {% else %} <!-- 原有商品表格、分页组件的渲染代码放在此处 --> {% endif %}
补充说明
你之前的代码在filtr参数为空时也会执行barcode_filter方法,大概率会返回全表数据,哪怕分页也会触发对应总数统计查询和分页数据查询,调整后初始访问完全不会命中Product表,哪怕表内数据量再大也不会拖慢首屏加载速度。
内容的提问来源于stack exchange,提问作者Roberto Meneses
相关产品推荐
相关产品推荐

