加載靜態文件
一個Web項目不僅需要HTML模板,還需要許多靜態文件,比如CSS、JavaScript文件、圖片和聲音聲。
在flask程序中,默認需要將靜態文件存儲在與主腳本(包含程序實例的腳本)同級目錄的static文件夾中。
為了在HTML文件中引用靜態文件,我們需要使用url_for()函數獲取靜態文件的URL。flask內置了用於獲取靜態文件的視圖函數,端點值為static,它的默認URL規則為/static/<path: filename>,
URL變量filename是相對於文件夾根目錄的文件路徑。
如果需要使用其他文件夾來存儲靜態文件,可以在實例化flask類時使用static_folder參數指定,靜態文件的URL路徑中的static也會自動跟隨文件夾名稱變化。
在實例化flask類時用static_url_path參數可以自定義靜態文件的URL路徑。
<img src="{{ url_for('static', filename='a.jpg') }}" width="50">
使用CSS框架
在編寫Web程序時,手動編寫CSS比較麻煩,更常見的做法是使用CSS框架來為程序添加樣式。
CSS框架內置了大量可以直接使用的CSS樣式類和javaScript函數,使用它們可以非常快速的讓程序頁面變得美觀和易用,同時我們也可以定義自己的CSS文件來進行補充和調整。
Bootstrap是最流行的開源前端框架之一,它有瀏覽器支持廣泛、響應式設計等特點。使用它可以快速搭建沒關、現代的網頁。
通常情況下,CSS和javaScript的資源引用會在基模板中定義,如:
{% block styles %}
<link rel="stylesheet" href="{{ url_for('static',filename='css/bootstrap.min.css') }}">
{% endblock %}
...
{% block scripts %}
<script src="{{ url_for('static', filename='js/jquery.min.js') }}}"></script>>
<script src="{{ url_for('static', filename='js/popper.min.js') }}}"></script>
<script src="{{ url_for('static', filename='js/bootstrap.min.js') }}"></script>
{% endblock %}
...
如果不使用Bootstrap提供的javascript功能,也可以不加載。
Bootstrap所依賴的jQuery和popper.js需要單獨下載,這三個javaScript文件在引入時要按照jQeury->popper.js->Bootstrap的順序引入
如果下簡化開發過程,也可以從CDN加載,這很方便。
才能夠CDN夾雜時,只下將相應的URL替換我CDN提供的資源URL,如:
{% block styles %}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
{% endblock %}
...
{% block scripts %}
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
{% endblock %}
...
Example:
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="{{ url_for('static', filename='css/start.css') }}">
<script type="text/javascript" src="{{ url_for('static', filename='js/jquery.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='js/start.js') }}"></script>
</head>