轮播图的展现方式和新闻类别相似,我们可以直接将它从数据库中取出给前端
图片文件及轮播图的sql语句在网盘中可以找到,knight已经为各位打包好。
链接:https://pan.baidu.com/s/1Hfci7xNBe7FC0LdNGFzR0Q
提取码:18n6
后端代码如下,通过上下文将我们的mysql中的数据传递到前端
def news(request):
"""
新闻首页视图
:param request:
:return:
"""
tags = Tag.objects.only('id', 'name').filter(is_delete=False)
banners = Banner.objects.only('image_url').order_by('priority')[:6]
return render(request, 'news/index.html',context={'tags': tags,"banners":banners})
即可见到一个完整的轮播图
新闻详情页
判断前端传递新闻id是否为空,是否为整数,是否存在
接口设计
接口说明:
类目 | 说明 |
---|---|
请求方法 | GET |
url定义 | /news/<int:news_id>/ |
参数格式 | url路径参数 |
- 参数说明:
参数名 | 类型 | 是否必须 | 描述 |
---|---|---|---|
news_id | 整数 | 是 | 新闻id |
-
返回结果:
html页面,直接通过模板渲染的方式实现
后端代码
视图
# 在news/views.py中定义如下视图
class NewDetailView(View):
def get(self, request, news_id):
news = News.objects.select_related('tag', 'author').only(
'title', 'content', 'update_time', 'tag__name', 'author__username').filter(
is_delete=False, id=news_id).first()
if news:
return render(request, 'news/news_detail.html', context={
'news': news,
})
else:
return HttpResponseNotFound('<h1>Page not found</h1>')
# 快捷方式
# 1. 去数据库获取新闻数据
# news_queryset = News.objects.select_related('tag', 'author').only('title', 'content', 'update_time', 'tag__name', 'author__username').filter(is_delete=False, id=news_id)
# news = get_object_or_404(news_queryset, is_delete=False, id=news_id)
# 2. 返回渲染页面
# return render(request, 'news/news_detail.html', context={'news': news})
路由
# 在news/urls.py中定义如下路由
urlpatterns = [
path('news/<int:news_id>/', views.NewDetailView.as_view(), name='news_detail')
]
我们随便点击一篇文章
这就是最终的效果啦。