Problème avec les chemins d'accès dans les templates Bottle

impossible d'avoir accès à mon stylesheet et à mes images

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Salut,

Je me suis mis au framework Bottle pour créer une petite interface web mais j'ai des soucis avec les chemins d'accès. La requête HTTP renvoie toujours 404 quand il demande des fichiers au serveur. Voici mon arborescence:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
+- CAT
|-+ cat
| |-+ interface
| | |-+ views
| | | |-+ asset
| | | | |-- cat.png
| | | | |-- background.png
| | | |-+ style
| | | | |-- main_page.css
| | | |-- main_page.tpl
| | |-- __init__.py
| | |-- interface.py
| |-- ... d'autre fichiers *.py pas important pour mon problème
|-- main.py

… mon CAT/cat/interface/interface.py:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/env python3
# coding: utf-8

import os

import bottle
from bottle import Bottle, view

DIRECTORY = os.path.dirname(__file__)  # Pour tester si ça venait du cwd, apparemment non
os.chdir(DIRECTORY)

bottle.debug = True

bottle.TEMPLATE_PATH = [DIRECTORY + '/views']


class CatInterface(Bottle):
    def __init__(self):
        super().__init__()

        @self.route('/')
        @view('main_page')
        def main_page():
            pass

    def run(self, host='localhost', port=8080, **kwds):
        super().run(host=host, port=port, **kwds)

… mon CAT/cat/interface/views/main_page.tpl:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>CAT</title>
        <link rel="stylesheet" href="style/main_page.css" />
    </head>

    <body>
        <img src="asset/cat.png" alt="cat.png">
    </body>
</html>

… et finalement mes messages lorsque j'accède à localhost:8080:

1
2
3
127.0.0.1 - - [17/May/2015 20:23:09] "GET / HTTP/1.1" 200 259
127.0.0.1 - - [17/May/2015 20:23:09] "GET /asset/cat.png HTTP/1.1" 404 746
127.0.0.1 - - [17/May/2015 20:23:09] "GET /style/main_page.css HTTP/1.1" 404 758

Alors, que j'explique un peu (désolé si je vous donne le code en tas), quand je lance l'application avec CatInterface().run() depuis CAT/main.py, mon stylesheet et mon image ne sont pas reconnus. J'ai essayé de remplacer les chemis d'accès de mon template (lignes 6 et 10) par tout ce qui était imaginable, y compris par des chemins absolus, mais rien n'y fait, je ne parviens pas à appliquer un style à mon template ni à afficher mon image. Je vous consulte donc pour savoir comment Bottle fonctionne, dans quel directory l'application est-elle lancée ? Et donc quel chemin d'accès dois-je préciser pour mon template ?

Merci beaucoup,

AZ.

Edit: Mise en page

Édité par felko

Anciennement AlphaZeta

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

J'ai jamais utilisé bottle mais la majorité des framework web, dont flask qui ressemble beaucoup a bottle, servent automatiquement ce genre de fichier quand ils sont dans un dossier particulier. En l'occurrence pour flask c'est dans "static" a côté de celui de tzmplates.

Édit : en fait la doc est clair a ce sujet : bottle ne le fait pas automatiquement : http://bottlepy.org/docs/dev/tutorial.html#routing-static-files

Tu doit créer des routes pour chaque fichier

Édité par Kje

+1 -0
Staff

Cette réponse a aidé l'auteur du sujet

Au passage, si tu compte faire un vrai site, Flask (avec le même esprit) est probablement plus adapté que bottle. bottle est surtout pratique quand tu veux intégré un mini serveur web a t'on apllication exécuté en local. Par exemple une application installé en local mais avec une interface via un navigateur web. Flask est aussi simple que bottle mais propose plus de choses en natif et integre très facilement des fonctionnalités avancés grace aux extensions. Mais après, ça dépend de ton projet.

+1 -0
Auteur du sujet

Par exemple une application installé en local mais avec une interface via un navigateur web

C'est exactement ce que je veux faire :)

Il me semble que Bottle aussi possède un système de plugin, comme il est moins lourd que Flask (du fait qu'il possède moins de features nativement), il me paraissait plus adapté.

Merci beaucoup

Anciennement AlphaZeta

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

Oui oui bottle est très bien et plus adapté si c'est une interface web local. Flask a un support bien plus important, il est plus populaire et se retrouve de fait plus adapté à la création de vrai sites. Mais si c'est pour une interface à une appli local, bottle est un bon choix, il a moins de dépendances et peut être livré en copiant un simple fichier python.

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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