Это можно сделать, загрузив каждый шаблон непосредственно из Google Cloud Storage для каждого запроса и используя функцию render_template_string
из Flask.
Например, если ваш файл шаблона hello.html
выглядит так:
<h1>Hello {{ name }}!</h1>
Добавьте ресурс облачного хранилища Google в свое приложение, создайте новый сегмент (назовем его your-bucket
) и загрузите этот файл в корзину.
В вашем requirements.txt
:
flask
google-cloud-storage
В вашем main.py
:
from flask import Flask, render_template_string
from google.cloud import storage
app = Flask(__name__)
# Initialize the bucket you created containing the templates
bucket = storage.Client().bucket('your-bucket')
@app.route('/')
def hello():
# Load the template string from Cloud Storage
template_string = bucket.blob('hello.html').download_as_string().decode('ascii')
# Now use render_template_string the same way you'd use render_template
return render_template_string(template_string, name='World')
Обратите внимание, что, поскольку это приложение будет повторно загружать шаблон для каждого запроса, для приложений с большим трафиком это может потребовать значительного дополнительного времени для запроса, а также затрат.
В связи с этим было бы идеально «кэшировать» строку шаблона каким-либо образом (например, через Cloud Memorystore ), а затем использовать Уведомление об изменении объекта ( возможно с помощью триггера Google Cloud Function ), чтобы определить, когда файл изменился в корзине, и обновить кэш.