(已解决)电影首页及搜索页,分页问题

来源:5-6 .电影搜索页面搭建

lslol

2017-09-01

(已解决)

老师你好,我想问下,

1.电影首页,经过分类筛选后,分页功能,当选择第二页时,之前的分类数据就会被清空,无法达到即分类又分页的效果。

2.搜索页面也有同样的问题,当搜索“电影” 共四部,第一页有key值,当点击第二页时key值丢失。如下图1,图2。麻烦老师指导下,谢谢!


http://szimg.mukewang.com/59a8a99c00011e6f10570487.jpg


http://szimg.mukewang.com/59a8a9b20001b8d810740547.jpg

已自行解决,有需要的同学,请参考如下回答的代码:#home/index.html,#home/search.html,#home/views.py

写回答

4回答

rustgopy

2017-09-02

好的,加油亲,这个后面有讲解的。

0
1
lslol
希望老师在后面的视频中能够多讲几个功能的完整实现。
2017-09-03
共1条回复

lslol

提问者

2017-09-01

------------------------------------------------------------------------------

#home/index.html

{% extends "home/layout.html" %}
{% import "ui/home_page.html" as pg %}
{% block css %}
{% endblock %}
{% block content %}
<!--热门电影-->
<section id="hotmovie" style="margin-top:76px">
   <div class="container">
       <div class="row wow fadeInRight" data-wow-delay="0.6s">
           <div class="row">
               <iframe class="wow fadeIn" width="100%" height="375px" frameborder=0 scrolling=no src="{{ url_for('home.animation')}}"></iframe>
           </div>
       </div>
   </div>
</section>
<!--热门电影-->
<!--电影列表-->
<section id="movielist">
   <div class="container">
       <div class="row wow fadeIn" data-wow-delay="0.6s">
           <div class="col-md-12 table-responsive">
               <table class="table text-left table-bordered" id="movietags">
                   <tr>
                       <td style="width:10%;">电影标签</td>
                       <td style="width:90%;">
                           {% for v in tags %}
                           <a href="{{ url_for('home.index',page=1) }}?tid={{ v.id }}&star={{ p['star'] }}&time={{ p['time'] }}&pm={{ p['pm'] }}&cm={{ p['cm'] }}" class="label label-info"><span class="glyphicon glyphicon-tag"></span>&nbsp;{{ v.name }}</a>
                           {% endfor %}
                   </tr>
                   <tr>
                       <td>电影星级</td>
                       <td>
                           {% for v in range(1,6) %}
                           <a href="{{ url_for('home.index',page=1) }}?tid={{ p['tid'] }}&star={{ v }}&time={{ p['time'] }}&pm={{ p['pm'] }}&cm={{ p['cm'] }}" class="label label-warning"><span class="glyphicon glyphicon-star"></span>&nbsp;{{ v }}星</a>
                           &nbsp{% endfor %}
                       </td>
                   </tr>
                   <tr>
                       <td>上映时间</td>
                       <td>
                           <a href="{{ url_for('home.index',page=1) }}?tid={{ p['tid'] }}&star={{ p['star'] }}&time={{ 1 }}&pm={{ p['pm'] }}&cm={{ p['cm'] }}" class="label label-default"><span class="glyphicon glyphicon-time"></span>&nbsp;最近</span></a>
                           <a href="{{ url_for('home.index',page=1) }}?tid={{ p['tid'] }}&star={{ p['star'] }}&time={{ 2 }}&pm={{ p['pm'] }}&cm={{ p['cm'] }}" class="label label-default"><span class="glyphicon glyphicon-time"></span>&nbsp;更早</span></a>
                       </td>
                   </tr>
                   <tr>
                       <td>播放数量</td>
                       <td>
                           <a href="{{ url_for('home.index',page=1) }}?tid={{ p['tid'] }}&star={{ p['star'] }}&time={{ p['time'] }}&pm=1&cm={{ p['cm'] }}" class="label label-success"><span class="glyphicon glyphicon-arrow-down"></span>&nbsp;从高到底</span></a>
                           &nbsp;
                           <a href="{{ url_for('home.index',page=1) }}?tid={{ p['tid'] }}&star={{ p['star'] }}&time={{ p['time'] }}&pm=2&cm={{ p['cm'] }}" class="label label-danger"><span class="glyphicon glyphicon-arrow-up"></span>&nbsp;从低到高</span></a>
                       </td>
                   </tr>
                   <tr>
                       <td>评论数量</td>
                       <td>
                           <a href="{{ url_for('home.index',page=1) }}?tid={{ p['tid'] }}&star={{ p['star'] }}&time={{ p['time'] }}&pm={{ p['pm'] }}&cm=1"  class="label label-success"><span class="glyphicon glyphicon-arrow-down"></span>&nbsp;从高到底</span></a>
                           &nbsp;
                           <a href="{{ url_for('home.index',page=1) }}?tid={{ p['tid'] }}&star={{ p['star'] }}&time={{ p['time'] }}&pm={{ p['pm'] }}&cm=2" class="label label-danger"><span class="glyphicon glyphicon-arrow-up"></span>&nbsp;从低到高</span></a>
                       </td>
                   </tr>
               </table>
           </div>
           {% for v in page_data.items %}
           <div class="col-md-3">
               <div class="movielist text-center">
                   <!--<img data-original="holder.js/262x166"
                            class="img-responsive lazy center-block" alt="">-->
                   <img src="{{ url_for('static',filename='uploads/'+v.logo) }}" style="width:262px;" class="img-responsive center-block" alt="">
                   <div class="text-left" style="margin-left:auto;margin-right:auto;width:210px;">
                       <span style="color:#999;font-style: italic;">{{ v.title }}</span><br>
                       <div>
                           {% for val in range(1,v.star+1) %}
                           <span class="glyphicon glyphicon-star" style="color:#FFD119"></span>
                           {% endfor %}
                           {% for val in range(1,5-v.star+1) %}
                           <span class="glyphicon glyphicon-star-empty" style="color:#FFD119"></span>
                           {% endfor %}
                       </div>
                   </div>
                   <a href="{{ url_for('home.play',id=v.id) }}" class="btn btn-primary" target="_blank" role="button"><span class="glyphicon glyphicon-play"></span>&nbsp;播放</a>
               </div>
           </div>
           {% endfor %}
           <div class="col-md-12">
               <!--{{ pg.page(page_data,'home.index') }}-->
               <div class="col-md-12 text-center">
       <!--{{ pg.page(page_data,'home.search') }}-->
                   {% macro page(data,url) %}
                   {% if data %}
                   <nav aria-label="Page navigation">
                   <ul class="pagination">
                       <li><a href="{{ url_for(url,page=1) }}&tid={{ p['tid'] }}&star={{ p['star'] }}&time={{ p['time'] }}&pm={{ p['pm'] }}&cm={{ p['cm'] }}">首页</a></li>
                       {% if data.has_prev %}
                       <li><a href="{{ url_for(url,page=data.prev_num) }}&tid={{ p['tid'] }}&star={{ p['star'] }}&time={{ p['time'] }}&pm={{ p['pm'] }}&cm={{ p['cm'] }}">上一页</a></li>
                       {% else %}
                       <li class="disabled"><a href="#">上一页</a></li>
                       {% endif %}
                       {% for v in data.iter_pages() %}
                       {% if v %}
                           {% if v == data.page %}
                           <li class="active"><a href="{{ url_for(url,page=v) }}&tid={{ p['tid'] }}&star={{ p['star'] }}&time={{ p['time'] }}&pm={{ p['pm'] }}&cm={{ p['cm'] }}">{{ v }}</a></li>
                           {% else %}
                           <li ><a href="{{ url_for(url,page=v) }}&tid={{ p['tid'] }}&star={{ p['star'] }}&time={{ p['time'] }}&pm={{ p['pm'] }}&cm={{ p['cm'] }}">{{ v }}</a></li>
                           {% endif %}
                       {% else %}
                       <li><a>...</a></li>
                       {% endif %}
                       {% endfor %}
                       {% if data.has_next %}
                       <li><a href="{{ url_for(url,page=data.next_num) }}&tid={{ p['tid'] }}&star={{ p['star'] }}&time={{ p['time'] }}&pm={{ p['pm'] }}&cm={{ p['cm'] }}">下一页</a></li>
                       {% else %}
                       <li class="disabled"><a href="#">下一页</a></li>
                       {% endif %}
                       <li><a href="{{ url_for(url,page=data.pages) }}&tid={{ p['tid'] }}&star={{ p['star'] }}&time={{ p['time'] }}&pm={{ p['pm'] }}&cm={{ p['cm'] }}">尾页</a></li>
                   </ul>
                   </nav>
                   {% endif %}
               {% endmacro %}
                   {{ page(page_data,'home.index') }}
               </div>
           </div>
       </div>
   </div>
</section>
<!--电影列表-->



{% endblock %}
{% block js %}
<script>
   $(document).ready(function(){
       $("#m-1").addClass("active");
   });
</script>
{% endblock %}

------------------------------------------------------------------------------

0
0

lslol

提问者

2017-09-01

------------------------------------------------------------------------------

#home/search.html

{% extends "home/home.html" %}
<!--{% import "ui/search_page.html" as pg %}-->
{% block css %}
{% endblock %}
{% block content %}
<div class="row">
   <div class="col-md-12">
       <ol class="breadcrumb" style="margin-top:6px;">
           <li>与"{{ key }}"有关的电影,共{{ movie_count }}部</li>
       </ol>
   </div>
   <div class="col-md-12">
       {% for v in page_data.items %}
       <div class="media">
           <div class="media-left">
               <a href="{{ url_for('home.play',id=v.id) }}">
               <img media-object style="width:183px;height:83px"  src="{{ url_for('static',filename='uploads/'+v.logo) }}" alt="{{ v.title }}">
               </a>
           </div>
           <div class="media-body">
               <h4 class="media-heading">{{ v.title }}<a href="{{ url_for('home.play',id=v.id) }}" class="label label-primary pull-right"><span
                       class="glyphicon glyphicon-play"></span>播放影片</a></h4>
               {{ v.info }}
           </div>
       </div>
       {% endfor %}
   </div>
   <div class="col-md-12 text-center">
       <!--{{ pg.page(page_data,'home.search') }}-->
       {% macro page(data,url) %}
       {% if data %}
       <nav aria-label="Page navigation">
       <ul class="pagination">
           <li><a href="{{ url_for(url,page=1) }}&key={{ key }}">首页</a></li>
           {% if data.has_prev %}
           <li><a href="{{ url_for(url,page=data.prev_num) }}&key={{ key }}">上一页</a></li>
           {% else %}
           <li class="disabled"><a href="#">上一页</a></li>
           {% endif %}
           {% for v in data.iter_pages() %}
           {% if v %}
               {% if v == data.page %}
               <li class="active"><a href="{{ url_for(url,page=v) }}&key={{ key }}">{{ v }}</a></li>
               {% else %}
               <li ><a href="{{ url_for(url,page=v) }}&key={{ key }}">{{ v }}</a></li>
               {% endif %}
           {% else %}
           <li><a>...</a></li>
           {% endif %}
           {% endfor %}
           {% if data.has_next %}
           <li><a href="{{ url_for(url,page=data.next_num) }}&key={{ key }}">下一页</a></li>
           {% else %}
           <li class="disabled"><a href="#">下一页</a></li>
           {% endif %}
           <li><a href="{{ url_for(url,page=data.pages) }}&key={{ key }}">尾页</a></li>
       </ul>
       </nav>
       {% endif %}
   {% endmacro %}
       {{ page(page_data,'home.search') }}
   </div>

</div>
<script>
   $(document).ready(function() {
       $("img.lazy").lazyload({
           effect: "fadeIn"
       });
       $("#do_search").click(function(){
           var key = $("#key_movie").val();
           location.href = "{{ url_for('home.search',page=1) }}";
       });
   });

</script>

{% endblock %}
{% block js %}
{% endblock %}


------------------------------------------------------------------------------


0
0

lslol

提问者

2017-09-01

------------------------------------------------------------------------------

#home/views.py

# 首页
@home.route("/", methods=["GET"])
def index():
   page = request.args.get("page", 1, type=int)
   tags = Tag.query.all()
   page_data = Movie.query
   # 标签
   tid = request.args.get("tid", 0)
   if int(tid) != 0:
       page_data = page_data.filter_by(tag_id=int(tid))
   # 星级
   star = request.args.get("star", 0)
   if int(star) != 0:
       page_data = page_data.filter_by(star=int(star))
   # 时间
   time = request.args.get("time", 0)
   if int(time) != 0:
       if int(time) == 1:
           page_data = page_data.order_by(
               Movie.addtime.desc()
           )
       else:
           page_data = page_data.order_by(
               Movie.addtime.asc()
           )
   # 播放量
   pm = request.args.get("pm", 0)
   if int(pm) != 0:
       if int(pm) == 1:
           page_data = page_data.order_by(
               Movie.playnum.desc()
           )
       else:
           page_data = page_data.order_by(
               Movie.playnum.asc()
           )
   # 评论量
   cm = request.args.get("cm", 0)
   if int(cm) != 0:
       if int(cm) == 1:
           page_data = page_data.order_by(
               Movie.commentnum.desc()
           )
       else:
           page_data = page_data.order_by(
               Movie.commentnum.asc()
           )
   if page is None:
       page = 1
   page_data = page_data.paginate(page=page, per_page=1)

   p = dict(
       tid=tid,
       star=star,
       time=time,
       pm=pm,
       cm=cm,
   )
   return render_template("home/index.html", tags=tags, p=p, page_data=page_data)


#搜索
@home.route("/search/")
def search():
   page = request.args.get("page", 1,type=int)
   key = request.args.get("key","")
   movie_count = Movie.query.filter(
       Movie.title.ilike('%'+key+"%")
   ).count()

   page_data = Movie.query.filter(
       Movie.title.ilike('%'+key+"%")
   ).order_by(
       Movie.addtime.desc()
   ).paginate(page=page, per_page=1)
   return render_template("home/search.html",key=key,page_data=page_data,movie_count=movie_count)

------------------------------------------------------------------------------




0
0

Python Flask 构建微电影视频网站

Python 最好用轻量级框架,让你轻松胜任 Python Web 工程师

683 学习 · 663 问题

查看课程