flask web学习记录(2)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_20539533/article/details/83387942

首先,针对上一笔记出出现的问题解释一下。书上的是

from flask.ext.bootstrap import Bootstrap

试了,不成功。搜了一下,更改为

from flask_bootstrap import Bootstrap

然后,书上说使用flask-bootstrap的模板。我在目录下找了半天,也搜了一下。最后在项目目录的\venv\Lib\site-packages\flask_bootstrap\templates\bootstrap找到了。

一共安装了flask-bootstrap,flask-bootstrap3,flask-bootstrap4这三个版本。使用第一个版本的并没有和书本出西安一样的图,没有效果。使用了flask-bootstrap3,出来了一半,导航栏倒是出来了,但是下面的body没了。研究了一下,是书本上的和我安装的flask-bootstrap3的base.html模板有些出入。放出我修改后的代码。

{% extends "bootstrap/base.html" %}

{% block title %}Flasky{% endblock %}

{% block navbar %}
<div class="navbar navbar-inverse" role="navigation">
    <div class="container">
        <div class="nav-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-taget=".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="/">Flasky</a>
        </div>
        <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
                <li><a href="/">Home</a> </li>
            </ul>
        </div>
    </div>
</div>
{% endblock %}

{% block content %}
<div class="container">
    {% block body %}
        <h1>hello,{{name}}!</h1>
    {% endblock %}
</div>
{% endblock %}

运行图:

自定义错误页面

@app.errorhandler(404)
def pag_not_found(e):
    return render_template('404.html'),404

@app.errorhandler(500)
def pag_not_found(e):
    return render_template('500.html'),500

在templates文件下创建一个base.html的模板,用来给404和500当模板

{% extends "bootstrap/base.html" %}

{% block title %}Flasky{% endblock %}

{% block navbar %}
<div class="navbar navbar-inverse" role="navigation">
    <div class="container">
        <div class="nav-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-taget=".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="/">Flasky</a>
        </div>
        <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
                <li><a href="/">Home</a> </li>
            </ul>
        </div>
    </div>
</div>
{% endblock %}

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

404.html的代码:

{% extends "base.html" %}

{%block title %}Flask -Page Mot Found{% endblock %}
{% block content %}
<div class="container">
    {% block body %}
    <h1>Not Found</h1>
    {% endblock %}
</div>
{% endblock %}

之前写的user.html也可修改使用这个模板,修改后为

{% extends "base.html" %}

{% block title %}Flasky{% endblock %}

{% block content %}
<div class="container">
    {% block body %}
        <h1>hello,{{name}}!</h1>
    {% endblock %}
</div>
{% endblock %}

接下来是链接。粗略说一下,对于包含可变部分的动态路由,在模板中构建正确的url有困难,直接编写url会对代码中定义的路由产生不必要的依赖关系。如果重新定义路由,模板的连接可能会失效。

url_for()辅助函数可以使用程序url映射中保存的信息生成url。使用url_for()生成动态地址时,将动态部分作为关键字参数传入。例如url_for('user',name='john',_external=True)的返回结果是http://localhost:5000/user/john

函数能将任何额外参数增加到查询字符串中。()

静态文件

定义收藏夹图标(似乎有些问题无法显示)

{% 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 %}

使用flask-moment本地化日期和时间

首先要安装这个库,初始化

from flask_moment import Moment

moment=Moment(app)

在base.html增加

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

py文件中修改

@app.route('/')
def index():
    return render_template('index.html',current_time=datetime.utcnow())

index.html修改

    <p>The local date and time is {{ moment(current_time).format('LLL') }}</p>
    <p>That was {{ moment(current_time).formNow(refresh=True) }}</p>

后面检测半天不能运行,导航没有了,检查了发现是extends导错了。

这段时间要学其他的了,一周后在学这个。要进行安卓的学习,stm32的学习还有等等的学习。

猜你喜欢

转载自blog.csdn.net/qq_20539533/article/details/83387942