Как создать страницу для отображения исходного кода html (только) веб-сайта, созданного на основе Google Листов?

#python #html #api #flask #google-sheets

Вопрос:

У меня есть календарь, который я создал из Google Таблиц с помощью API. Я хочу создать другую страницу(маршрут) для отображения html-кода (не отображаемого шаблона) календаря. Вот мой код:

 from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials
from google.oauth2 import service_account

from flask import Flask
from flask import Flask, flash, jsonify, redirect, render_template, request, url_for, 
session

import requests

app = Flask(__name__)

SERVICE_ACCOUNT_FILE = 'keys.json'
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

creds = None
creds = service_account.Credentials.from_service_account_file(
     SERVICE_ACCOUNT_FILE, scopes=SCOPES)

# The ID and range of a sample spreadsheet.
SAMPLE_SPREADSHEET_ID = 'removed for security'

service = build('sheets', 'v4', credentials=creds)

# Call the Sheets API
sheet = service.spreadsheets()
result = sheet.values().get(spreadsheetId=SAMPLE_SPREADSHEET_ID,
                            range="new!A2:D9").execute()

header = sheet.values().get(spreadsheetId=SAMPLE_SPREADSHEET_ID,
                            range="new!A1:D1").execute()
                                                                    

request = sheet.values().update(spreadsheetId=SAMPLE_SPREADSHEET_ID, 
         range="new!A10", valueInputOption="USER_ENTERED", body= 
         {"values":newvalues}).execute()


@app.route('/', methods=["GET", "POST"])
def index():
        values = result.get('values', [])
        headers = header.get('values', [])

          return render_template("index.html", values=values, headers=headers)


 @app.route('/text', methods=["GET", "POST"])
 def text():
           t = requests.get('http://127.0.0.1:5000')
           return (t.content)

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

Маршрут «/текст» отображает страницу точно так же, как страница»/». Я хочу, чтобы он возвращал только html-код, а не отрисованный шаблон.

Комментарии:

1. вы можете использовать автоэкранирование jinja.palletsprojects.com/en/3.0.x/api/#autoescaping

2. Я просмотрел документацию, на которую вы ссылались, но я не совсем уверен, как это использовать. Будет ли это отдельная функция или строка в функции def text ()? Предназначено ли это для удаления расширения .html и чтения имени файла index.html как просто индекс? Я в замешательстве. Спасибо за разъяснение.

3. то , что вы хотите показать, код, такой же, как тот, который вы пишете в html-файле с помощью jinja syntax, или тот, который отображается без синтаксиса jinja с помощью jinja.

Ответ №1:

Попробуйте настроить тип mime ответа на text/plain использование make_response :

 from flask import app, make_response, render_template

app = Flask(__name__)

@app.route('/')
def index():
    resp = make_response(render_template('template.html'))
    resp.mimetype = 'text/plain'
    return resp
 

Комментарии:

1. Это близко к тому, что я ищу… однако он не отображает полный html-код, потому что он не просматривает данные электронной таблицы. Например, в тегах заголовка отображается только <thead><thead></thead>, но на странице должно отображаться </thead><thead> <tr><tr><th>Дата<th></th></th> <th>Регион<th></th></th> <th>Турнир<th></th></th> <th>Город<th></th></tr> </tr></tr></th>

2. Не могли бы вы показать мне, как вы адаптировали код? С другой стороны, если вы хотите получить все значения, я не понимаю, почему вы звоните 'http://127.0.0.1:5000' вместо того, чтобы использовать ту же index структуру, адаптируя последние строки.

3. Я изменил следующую функцию, а также добавил запрос на импорт для make_response. Извините, я не могу понять, как получить код в правильном формате. @app.route('/text', methods=["GET", "POST"]) def text(): resp = make_response(render_template('index.html')) resp.mimetype = 'text/plain' return resp

4. Почему ты не пользуешься render_template("index.html", values=values, headers=headers) ?

5. Спасибо! Отлично работает!