Comment insérer un fichier HTML servi par static_file() dans un template Bottle ?

Le problème exposé dans ce sujet a été résolu.

Bonjour Ce code m’a presque permis d’obtenir ce que je voulais :

from bottle import run, route, view, static_file

@route("/primo")
@view("page_de_garde.tpl")
def primo() :
    url = "primo.html"
    #contenu = static_file(url, root='static/textes', mimetype='text/html')
    #return{"titre" : "Qui ?", "contenu" : contenu}
    return static_file(url, root='static/textes', mimetype='text/html')

@route("/")
@view("page_de_garde.tpl")
def menu() :
    menu = """<ul>
    <li><a href='/primo'>Qui ?</a>
    <li><a href='/secundo'>Quoi ?</a>
    <li><a href='/tertio'>Que ?</a>
    </ul>
    """
    return {"titre" : "Questions", "contenu" : menu}

run(host='0.0.0.0', port=8080, debug= True, reloader=True)

Ce qui est en commentaire correspond à l’idée que j’avais: récupérer la page primo.html et l’insérer dans le body du template.

<!doctype html>
<!-- page_de_garde.tpl -->
<HTML lang="fr">
  <HEAD>
     <TITLE>{{titre}}</TITLE>
     <meta charset="UTF-8">
  </HEAD>
  <body>
    <header><h1>Phrases et attrapes<h1></header>
    <h3>{{titre}}</h3>
    {{!contenu}}
    <hr/>
  </body>
</html>

Ça marche, mais bien sûr, la page servie remplace la page de garde. Je perds le header, le titre, etc. La solution en commentaire, elle, me permet de servir ça :

<_io.BufferedReader name='/Users/dupont/blog/phrases/static/textes/primo.html'>

En dessous de mon header et du titre, tout bien…!

Je songe à ouvrir le fichier et à le copier. Mais ça me paraît pas terrible.

Alors je crois qu’il faut me diriger vers un truc comme rebase ou include.

17 h 37 Ça y est, tout est réglé. J’étais parti sur une mauvaise piste. Static_file, c’était pas ça qu’il me fallait en l’occurrence. En fait, c’est tout bêtement un fichier à ouvrir, à lire, pour insérer le contenu dans le template.Je n’avais pas songé qu’un fichier html est tout simplement une suite de caractères.

+0 -0

Ça y est, tout est réglé. J’étais parti sur une mauvaise piste. Static_file, c’était pas ça qu’il me fallait en l’occurrence. En fait, c’est tout bêtement un fichier à ouvrir, à lire, pour insérer le contenu dans le template.Je n’avais pas songé qu’un fichier html est tout simplement une suite de caractères.

Zakod

En effet les fichiers statiques sont comme leur nom l’indique… statiques ! Cela signifie qu’ils sont renvoyés tels quels, sans aucune transformation, c’est ce qui permet de les mettre en cache efficacement.

Mais la solution que tu envisages me semble bancale, pourquoi ne pas juste charger ton template avec @view ?

Néanmoins si ton problème est résolu, tu peux le marquer comme tel en cliquant sur le lien « Marquer comme résolu » dans la colonne de gauche de ton sujet.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte