flask之模板html中調用python函數方法


一:html里面可以調用python寫的函數

add_template_global(調用函數的引用,"調用函數的名字")

from common.libs.UrlManager import UrlManager
app.add_template_global(UrlManager.buildStaticUrl,"buildStaticUrl")
app.add_template_global(UrlManager.buildUrl,"buildUrl")
app.add_template_global(UrlManager.buildImageUrl,"buildImageUrl")

作用:這個是為了讓前端界面可以通過這個url找到需要的元素

 <img src="{{ buildStaticUrl('/images/common/qrcode.jpg') }}" width="200px">

 

# -*- coding: utf-8 -*-
import time
from application import app

class UrlManager(object):
    def __init__(self):
        pass

    @staticmethod
    def buildUrl( path ):
        return path

    @staticmethod
    def buildStaticUrl(path):
        release_version = app.config.get( 'RELEASE_VERSION' )
        print("這是什么玩意:",release_version) # 訪問login.html一共打印了10次None,源模板7次,本身打印3次
        ver = "%s"%( int( time.time())) if not release_version else release_version
        path =  "/static" + path + "?ver=" + ver
        # 對path進行拼接,路徑是靜態文件里面的圖片和css,js等資源
        return UrlManager.buildUrl( path )

    @staticmethod
    def buildImageUrl( path ):
        app_config = app.config['APP']
        url = app_config['domain'] + app.config['UPLOAD']['prefix_url'] + path
        return url

設計藍圖

from flask import Blueprint,send_from_directory
from application import app

route_static = Blueprint("static",__name__)
@route_static.route("/<path:filename>")
def index(filename):
    # 因為static的位置也改變了,因此使用路由的方式來訪問我們靜態文件
    return send_from_directory(app.root_path+"/web/static/",filename)

 

注冊藍圖

app.register_blueprint(route_static,url_prefix="/static")

 

請求成功后,控制台輸出
111.18.99.43 - - [04/Apr/2020 20:47:50] "GET /static/css/style.css?ver=1586004470 HTTP/1.1" 200 -
111.18.99.43 - - [04/Apr/2020 20:47:52] "GET /static/plugins/jquery-2.1.1.js?ver=1586004470 HTTP/1.1" 200 -
111.18.99.43 - - [04/Apr/2020 20:47:52] "GET /static/images/common/mini_qrcode.jpg?ver=1586004470 HTTP/1.1" 200 -
111.18.99.43 - - [04/Apr/2020 20:47:53] "GET /static/bootstrap/bootstrap.min.js?ver=1586004470 HTTP/1.1" 200 -
111.18.99.43 - - [04/Apr/2020 20:47:53] "GET /static/plugins/layer/layer.js?ver=1586004470 HTTP/1.1" 200 -
111.18.99.43 - - [04/Apr/2020 20:47:53] "GET /static/images/common/qrcode.jpg?ver=1586004470 HTTP/1.1" 200 -
111.18.99.43 - - [04/Apr/2020 20:47:55] "GET /static/js/common.js?ver=1586004470 HTTP/1.1" 200 -
111.18.99.43 - - [04/Apr/2020 20:47:55] "GET /static/js/user/login.js?ver=1586004470 HTTP/1.1" 200 -

send_from_direcorty(文件所在的文件夾,文件名)的作用:就是幫你找到你的所需要的文件,傳入的參數是路徑和文件名

 <img src="{{ buildStaticUrl('/images/common/qrcode.jpg') }}" width="200px">

 

過程:html里面調用了 buildStaticUrl(包含路徑),函數的返回值是一個path,給src賦值為這個path,然后就發送了請求,按照這個路徑進行尋找,然后觸發了route_static這個藍圖,進入index函數,通過send_from_directory方法,找到文件真實的路徑,進行展示

 

 

 

 

 

 

 

 

 

 

 







# TODO

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM