zoukankan      html  css  js  c++  java
  • 3flask模板

    3模板

    看完第三章回来总结的:

    都是用的扩展类。的基础用法。配置pip 然后app=扩展(app),然后再用那些封装好的。

    表现逻辑用模板提高程序的可维护性。业务逻辑用

    image-20200301140641369

    3.1Jinja2模板引擎

    image-20200301143733146

    3.1.1渲染模板

    renturn_template('user.html',name=name)

    image-20200301144256302

    3.1.2变量

    image-20200301144737121

    部分过滤器

    image-20200301145228501

    https://jinja.palletsprojects.com/en/2.11.x/templates/#builtin-filters

    image-20200301150803762

    3.1.3控制结构

    if、for、宏(=python中的函数)

    image-20200301150936153

    image-20200301154300359

    基模板block块

    image-20200301154647621

    include:引入html?

    extends:导入模板。(模板继承)

    3.2使用Flask-Bootstrap集成Twitter Bootstrap

    image-20200301154907618

    image-20200301155451651

    image-20200301155601810

    image-20200301163026147

    http://getbootstrap.com/

    git checkout 3b

    flask_bootstrap

    from flask_bootstrap import Bootstrap
    from flask import Flask, render_template
    app = Flask(__name__)
    bootstrap = Bootstrap(app)  # 放在最后也正常,但是为了加载最好放在这里,后面要用,对吧!
    @app.route('/user/<name>')
    def user(name):
       return render_template("user.html", name=name)

    # if __name__=='__main__':
    #     app.run()

    user.html

    {#{% extends 'D:PythonCodeFlask_Web_Dog_bookLibsite-packagesflask_bootstrap	emplatesootstrapase.html' %}#}
    {% extends "bootstrap/base.html" %}
    {% block title %}刘洋的秘密花园{% endblock %}
    {% block navbar %}
       <div class="navbar navbar-inverse" role="navigation">
           <div class="container">
               <div class="navbar-header">
                   <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse" >
                       <span class="sr-only">Toggle navigation</span>
                       <span class='icon-bar'></span>
                       <span class="icon-bar"></span>
                       <span class="icon-bar"></span>
                   </button>
                   <a class="navbar-brand" href="/">刘洋</a>
               </div>
               <div class="navbar-collapse collapse">
                   <ul class="nav navbar-nav">
                       <li><a href="/">家园</a></li>
                   </ul>
               </div>
           </div>
       </div>
    {% endblock %}
    {% block content %}
       <div class="container">
           <h1>Hello,{{ name }}!</h1>
       </div>
    {% endblock %}

    {#{% extends 'D:PythonCodeFlask_Web_Dog_bookLibsite-packagesflask_bootstrap emplatesootstrapase.html' %}#}

    这样写的时候,报错,可能是f没有识别,小红点处

    jinja2.exceptions.TemplateNotFound: D:PythonCodeFlask_Web_Dog_bookLibsite-packages•lask_bootstrap   emplateootstraase.html

    竟然能找到地址。不通过绝对路径,加载了地址了吗

    image-20200301195721641

    这个还以为是错的,没想到extends,可以正常识别。

    结果显示:

    image-20200301195803798

    base.html中的其他可用模块

    image-20200301200703164

    image-20200301200904180

    集成模板时扩展用super

    image-20200301201304382

    3.3自定义错误页面

    404:page not found

    500: internal_server_error

    image-20200301201536929

    写模板,改block 'page_content'

    然后,user.html、404.html、505.html都继承这个模板。

    image-20200301202019596

    404和user.html修改如下。

    image-20200301203137836

    但是不知道什么原因:

    image-20200301205441842

    error1 ?

    我这个写的500,去了404的页面。

    404是路由不匹配的。

    image-20200301205848410

    后端显示。500

    "GET /404 HTTP/1.1" 404 -
    "GET /500 HTTP/1.1" 404 -

    base.html

    {#{% extends 'D:PythonCodeFlask_Web_Dog_bookLibsite-packagesflask_bootstrap	emplatesootstrapase.html' %}#}
    {% extends "bootstrap/base.html" %}
    {% block title %}刘洋的秘密花园{% endblock %}
    {% block navbar %}
       <div class="navbar navbar-inverse" role="navigation">
           <div class="container">
               <div class="navbar-header">
                   <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse" >
                       <span class="sr-only">Toggle navigation</span>
                       <span class='icon-bar'></span>
                       <span class="icon-bar"></span>
                       <span class="icon-bar"></span>
                   </button>
                   <a class="navbar-brand" href="/">刘洋</a>
               </div>
               <div class="navbar-collapse collapse">
                   <ul class="nav navbar-nav">
                       <li><a href="/">家园</a></li>
                   </ul>
               </div>
           </div>
       </div>
    {% endblock %}
    {% block content %}

       <div class="container">
          {% block page_content %}{% endblock %}
       </div>
    {% endblock %}


    404页面

    {% extends "base.html" %}
    {% block title %}Flasker - Page Not Found{% endblock %}
    {% block page_content %}
       <div class="page-header">
           <h1>Not Found</h1>
       </div>
    {% endblock %}

    user.html

    {% extends "base.html" %}
    {% block title %}刘洋的秘密花园{% endblock %}
    {% block page_content %}
       <div class="container">
           <h1>Hello,{{ name }}!</h1>
       </div>
    {% endblock %}

    500.html

    {% extends "base.html" %}
    {% block title %}Flasker - Internal_Server_error{% endblock %}
    {% block page_content %}
       <div class="page-header">
           <h1>internal_server_error</h1>
       </div>
    {% endblock %}

    F4 404和505的自定义写法以及加载模板的程序

    from flask_bootstrap import Bootstrap
    from flask import Flask, render_template
    app = Flask(__name__)
    bootstrap = Bootstrap(app)  # 放在最后也正常,但是为了加载最好放在这里,后面要用,对吧!
    # @app.route('/user/<name>')
    # def user(name):
    #     return render_template("base.html", name=name)
    
    @app.route('/user/<name>')
    def user(name):
        return render_template("user.html", name=name)
    
    @app.errorhandler(500)  # 内部服务器错误
    def internal_server_error(e):
        return render_template('500.html'), 500
    
    @app.errorhandler(404)
    def page_not_fount(e):
        return render_template('404.html'), 404
    
    
    
    
    # if __name__=='__main__':
    #     app.run()
    

    3.4链接

    url_for()防止混乱的/url依赖。改一个都变。都要改。还可以选择绝对路径和相对路径。

    image-20200301210245484

    3.5静态文件

    图片什么的。css,js什么,在static下。

    还是要用url_for(,filename='css/styles.css')

    image-20200301211444500

    怎么两个link?

    image-20200301211825798

    {% block head %}
        {{ super() }}
        <link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}" type="image/x-icon">
        <link rel="icon" href="{{ url_for('static', filename='favicon.ico') }}" type="image/x-icon">
    {% endblock %}

    写link的时候,没有提示。rel='shortcut icon'以及后面的url_for()都没有。

    image-20200301213625373

    nocan1?

    不过看不懂第二行代码什么意思?和第一行啥区别?url_for url_for

    3.6使用Flask_Moment本地化日期和时间

    初始化扩展第三个了。挺方便的。

    moment.js 集成到Jinja2模板中。

    image-20200301214203215

    base.html改js代码。集成以及用一个类。

    然后写py文件。函数传过去值。实时更新。

    image-20200301220734889

    多种格式。以及语言本地化。image-20200301220945721

    F5时间本地化程序

    from flask import Flask, render_template
    from datetime import datetime
    app = Flask(__name__)
    from flask_moment import Moment
    manager = Moment(app)
    
    @app.route('/')
    def index():
        return render_template('index.html', current_time=datetime.utcnow())

    base.html

    {% block scripts %}
    {{ super() }}
    {{ moment.include_moment() }}
    {% endblock %}

    index.html

    <p>The local date and time is {{ moment(current_time).format('LLL') }}.</p>
    <p>That was {{ moment(current_time).fromNow(refresh=True) }}</p>
  • 相关阅读:
    JS重修札记
    backbone简单札记
    通用前端开发框架(一)
    两天低效编程总结
    使用HTTP请求 查找指定位置附近的景点(GOOGLE 地图)
    Google Map上,加上座標點(POIs)
    iphone 反向地理解析 从坐标获得用户的具体位置信息
    iphone 计算大文件md5
    c#多线程下载
    iphone http同步 异步请求
  • 原文地址:https://www.cnblogs.com/Doner/p/12394122.html
Copyright © 2011-2022 走看看