html xinwen轮播,新闻首页实现 -- 4. 轮播图以及热门文章功能实现

四、新闻轮播图功能

1.分析

请求方法:GET

url定义:/news/banners/

请求参数:前端无需传入参数

向前端返回的数据格式为json格式,返回实例如下:

{

"errno": "0"

"errmsg": "",

"data": {

"banners": [

{

"image_url": "/media/jichujiaochen.jpeg",

"news_id": 221,

"news_title": "Python 算法 快速排序"

},

{

"image_url": "/media/python_advanced.jpg",

"news_id": 707,

"news_title": "Python 序列与映射的解包操作"

}

]

},

}

2.后端代码实现

导入测试数据

INSERT INTO `tb_banner` VALUES (1, '2018-12-17 15:34:11.000000', '2018-12-17 15:34:11.000000', 0, '/media/jichujiaochen.jpeg', 1, 221);

INSERT INTO `tb_banner` VALUES (2, '2018-12-17 15:34:11.000000', '2018-12-17 15:34:11.000000', 0, '/media/python_advanced.jpg', 2, 707);

INSERT INTO `tb_banner` VALUES (3, '2018-12-17 15:34:11.000000', '2018-12-17 15:34:11.000000', 0, '/media/python_function.jpg', 3, 869);

INSERT INTO `tb_banner` VALUES (4, '2018-12-17 15:34:11.000000', '2018-12-17 15:34:11.000000', 0, '/media/python_gui.jpg', 4, 884);

INSERT INTO `tb_banner` VALUES (5, '2018-12-17 15:34:11.000000', '2018-12-17 15:34:11.000000', 0, '/media/linux.jpg', 5, 918);

# 在news目录下views.py文件中创建如下类视图:

# 轮播图视图

class NewsBannerView(View):

"""

1.创建一个类视图 NewsBannerView

2.明确请求方式:

-- 请求类型 GET

-- 传参方式 无

-- url定义 /news/banner/

3.获取前端参数:

-- 无

4.业务处理:

--是否需要校验 不需要

--是否需要储存以及储存方式 不需要

--其他:

--数据库读取数据

--序列化

5.返回前端参数:

-- to_json_data(errno= ,errmsg=, data=)

"""

def get(self, request):

banners = models.Banner.objects.select_related('news').\

only('image_url','news__title','news__id').filter(is_delete=False)[0:constants.SHOW_BANNER_COUNT]

# 序列化输出

banners_info_list = []

for banner in banners:

banners_info_list.append({

'image_url':banner.image_url,

'news_id':banner.news.id,

'news_title':banner.news.title,

})

# 返回前端参数

data={

'banners':banners_info_list,

}

return to_json_data(data=data)

# 在news目录下constants.py中定义如下常量:

# 每页轮播数

SHOW_BANNER_COUNT = 5

# 在news目录下urls.py中定义如下路由:

urlpatterns = [

path('banners/', views.NewsBanner.as_view(), name='news_banner'),

]

3.前端代码实现

// 在static/js/news/index.js文件中

// 新闻轮播图功能

fn_load_banner();

/*=== bannerStart ===*/

let $banner = $('.banner');

let $picLi = $(".banner .pic li");

let $prev = $('.banner .prev');

let $next = $('.banner .next');

let $tabLi = $('.banner .tab li');

let index = 0;

// 小原点

$tabLi.click(function () {

index = $(this).index();

$(this).addClass('active').siblings('li').removeClass('active');

$picLi.eq(index).fadeIn(1500).siblings('li').fadeOut(1500);

});

// 点击切换上一张

$prev.click(function () {

index--;

if (index < 0) {

index = $tabLi.length - 1

}

$tabLi.eq(index).addClass('active').siblings('li').removeClass('active');

$picLi.eq(index).fadeIn(1500).siblings('li').fadeOut(1500);

}).mousedown(function () {

return false

});

$next.click(function () {

auto();

}).mousedown(function () {

return false

});

// 图片向前滑动

function auto() {

index++;

index %= $tabLi.length;

$tabLi.eq(index).addClass('active').siblings('li').removeClass('active');

$picLi.eq(index).fadeIn(3000).siblings('li').fadeOut(3000);

}

// 定时器

let timer = setInterval(auto, 2000);

$banner.hover(function () {

clearInterval(timer)

}, function () {

auto();

});

function fn_load_banner() {

$.ajax({

// 请求地址

url: "/news/banners/", // url尾部需要添加/

// 请求方式

type: "GET",

async: false

})

.done(function (res) {

if (res.errno === "200") {

let content = ``;

let tab_content = ``;

res.data.banners.forEach(function (one_banner, index) {

if (index === 0){

content = `

${one_banner.news_title}

`;

tab_content = `

`;

} else {

content = `

${one_banner.news_title}

`;

tab_content = `

`;

}

$(".pic").append(content);

$(".tab").append(tab_content)

});

} else {

// 登录失败,打印错误信息

message.showError(res.errmsg);

}

})

.fail(function () {

message.showError('服务器超时,请重试!');

});

}

/*=== bannerEnd ===*/

五、热门新闻推荐功能

1.分析

请求方法:GET

url定义:/news/index/

请求参数:前端无需传入参数

热门新闻推荐功能直接通过模版渲染的方式来实现。

2.后端代码实现

导入测试数据

INSERT INTO `tb_hotnews` VALUES (836, '2018-12-20 06:50:24.535637', '2018-12-20 06:50:24.535686', 0, 3, 54);

INSERT INTO `tb_hotnews` VALUES (837, '2018-12-20 06:50:24.547275', '2018-12-20 06:50:24.547324', 0, 1, 53);

INSERT INTO `tb_hotnews` VALUES (838, '2018-12-20 06:50:24.561432', '2018-12-20 06:50:24.561481', 0, 1, 52);

INSERT INTO `tb_hotnews` VALUES (839, '2018-12-20 06:50:24.574041', '2018-12-20 06:50:24.574090', 0, 3, 51);

INSERT INTO `tb_hotnews` VALUES (840, '2018-12-20 06:50:24.584482', '2018-12-20 06:50:24.584545', 0, 3, 50);

# 新闻首页视图

class NewsIndex(View):

"""

渲染新闻首页

-- 新闻标签

"""

def get(self, request):

"""

:param request:

:return:

"""

tags = models.Tag.objects.only('name','id').filter(is_delete=False)

hot_news = models.HotNews.objects.select_related('news').\

only('news__title', 'news__image_url', 'news__id').filter(is_delete=False).\

order_by('priority', '-news__clicks')[0:constants.SHOW_HOTNEWS_COUNT]

return render(request, 'news/index.html', locals())

# 在news目录下constants.py中定义如下常量:

# 显示热门新闻条数

SHOW_HOTNEWS_COUNT = 3

3.前端代码实现

{% for hot_new in hot_news %}

title

{{ hot_new.news.title }}

{% endfor %}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值