Flask之手搓bootstrap翻页

使用bootstrap框架的翻页组件时,记起在学习使用laravel框架的时候,只需要添加相应的功能代码,就可以直接使用翻页组件了,但缺少自定义,或者说自定义起来有点麻烦。

自己手搓翻页组件,不仅能加深对flask的认识,也更熟悉了前后代码之间的传递关系。

bootstrap翻页组件只有样式,如何把它变为自己想要的样子,做之前还需要在大脑里有个大概的形态。比如页面少时,有几页就显示几页,页数多时,就可以显示开始的和结束的页面,让人可以一目了然的知道,一共有多少页码。

页数少的时候,像这样:

页面多的时候,像这样:

这里面的数据,都是从omdb api里拉取的,详情可以看这个:flask之jinjia模板语法,拉取omdb api-CSDN博客

这次手搓翻页组件、控件,主要是为了自己的需求来做的。当当前页为第一页时,前翻按钮为禁用状态,当当前页为最后一页的时候,向后翻的按钮同样为禁用状态。

上代码:

from flask import Flask, render_template, request
import requests
import math
import json

app = Flask(__name__)


@app.route('/', methods=["GET"])
# @app.route('/?s=&page=', methods=["GET"])
def main():
    s = request.args.get("s")
    page = request.args.get("page")
    if page is None:
        page = 1
    else:
        page = int(request.args.get("page"))
    if s is None:
        s = 'superman'
    # Here is your key: 4ee0241e
    # OMDb API: http://www.omdbapi.com/?i=tt3896198&apikey=4ee0241e
    # rawData = requests.get("http://www.omdbapi.com/?apikey=4ee0241e&s=batman&page=1")
    rawData = requests.get(f"http://www.omdbapi.com/?apikey=4ee0241e&s={s}&page={page}")
    movies = rawData.json()
    pages = math.ceil(int(movies["totalResults"]) / 10)
    data = dict(
        movies=movies,
        active1="active",
        active2="",
        pages=pages,
        page=page,
        s=s,
    )
    return render_template("index.html", data=data)


@app.route('/', methods=["POST"])
def search():
    s = request.form["name"]
    page = 1
    rawData = requests.get(f"http://www.omdbapi.com/?apikey=4ee0241e&s={s}&page={page}")
    movies = rawData.json()
    pages = math.ceil(int(movies["totalResults"]) / 10)
    data = dict(
        movies=movies,
        active1="active",
        active2="",
        pages=pages,
        page=page,
        s=s,
    )
    return render_template("index.html", data=data)


@app.route('/')
def movie_by_title(imdbID):
    # rawData = requests.get("http://www.omdbapi.com/?apikey=4ee0241e&i={}".format(imdbID))
    rawData = requests.get(f"http://www.omdbapi.com/?apikey=4ee0241e&i={imdbID}")
    movie = rawData.json()
    data = dict(
        movie=movie,
        active1="",
        active2="active",
    )
    return render_template("movie.html", data=data)


if __name__ == '__main__':
    app.run(debug=True)

这次的路由只有三种,一是"/"根目录,有get和post状态2个路由,还有一个搜索search的post表单提交后展示电影详情页面的路由'/'。

Flask之手搓bootstrap翻页_第1张图片

目录结构:

Flask之手搓bootstrap翻页_第2张图片

模板代码:

footer.html

header.html


母版

home.html




    {% block head %}
        {% include './common/header.html' %}
    {% endblock %}
    


{% block nav %}
    {% include './common/nav.html' %}
{% endblock %}
{% block content %} {% endblock %}
{% block footer %} {% include './common/footer.html' %} {% endblock %}

nav.html

index.html

{% extends "common/home.html" %}

{% block content %}
    {% for movie in data["movies"].Search %}
        
...
{{ movie.Title[:35] }}

{{ movie.Year }}

详情
{% endfor %} {# 翻页 #} {% if data.pages>0 %}
{% endif %} {% endblock %}

movie.html

{% extends "common/home.html" %}

{% block content %}
    
...
{{ data["movie"].Title }}

Year:{{ data["movie"].Year }}

Runtime:{{ data["movie"].Runtime }}

Actors:{{ data["movie"].Actors }}

{{ data["movie"].Actors }}

{{ data["movie"].Year }}

{{ data["movie"].Plot }}

{% endblock %}

里面容易绕圈圈的是,首页默认会有搜索词及内容,点击搜索按钮后,也是跳转到首页页面,显示搜索的内容,翻页也是在首页模板里面进行翻页。之前考虑使用

url_for()

url_for函数来进行跳转,发现这样的话,在循环翻页按钮的时候,怎么批量生成翻页按钮难住我了。这样不如直接获取链接地址里面的参数,来实现页面跳转。如果单独写一个 

'/?s=&page='

这样的路由,发现根本不起作用,起作用的还是'/'这个路由,只有使用函数url_for才能指定路由函数名称,才会执行,否则就是'/'起作用了。

 

你可能感兴趣的:(Flask,flask,bootstrap,python)