嘿,Django的小伙伴们,今天我们来聊一个能让你代码量瞬间“瘦身”,逼格直线飙升的神器——ListView。
有没有过这种经历?产品经理屁颠屁颠跑过来:“哥,咱整个文章列表页,要能分页,最好还能搜一下…” 你表面微笑,心里已经开始盘算:视图里取数据、手动分页、处理GET参数、渲染模板… 一顿操作猛如虎,一看代码二十五(行)。
停!打住!从今天起,请把上面那个“勤劳”的你暂时封印。咱们要开启“优雅偷懒”模式了。Django的设计者早就看穿了一切,他们给你准备了一个名叫 ListView 的“万能懒人包”。
一、 ListView是个啥?为啥说它是“大聪明”?
你可以把 ListView 想象成一个高度智能的“工厂流水线”。它的专职工作就是从数据库里取出一“列表”的东西,然后塞给模板显示出来。
传统写法(老黄牛模式):
# views.py (传统写法)
from django.shortcuts import render
from .models import Article
from django.core.paginator import Paginator
def article_list(request):
article_list = Article.objects.all() # 1. 获取所有文章
paginator = Paginator(article_list, 10) # 2. 手动分页,每页10篇
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number) # 3. 获取当前页对象
context = {'page_obj': page_obj} # 4. 构造上下文
return render(request, 'blog/article_list.html', context) # 5. 渲染模板
看看,足足5个步骤,虽然不难,但每个列表页都这么写,烦不烦?
ListView写法(开挂模式):
# views.py (ListView模式)
from django.views.generic import ListView
from .models import Article
class ArticleListView(ListView):
model = Article # 告诉它,你要操作哪个模型
template_name = 'blog/article_list.html' # (可选)告诉它模板在哪
context_object_name = 'articles' # (可选)告诉它上下文变量叫啥
paginate_by = 10 # (可选)告诉它每页显示10条
完了! 对,就这么四行(甚至有些还是可选的),它就把上面老黄牛模式的所有活儿都干完了!分页?自动的!数据获取?自动的!模板渲染?自动的!

最低0.47元/天 解锁文章
2087

被折叠的 条评论
为什么被折叠?



