Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Pb routing pendant migration Flask ==> Bottle

+1 vote

J'ai un script qui fonctionne sous Flask mais suite à un pb de versioning avec mon raspberry, je souhaite
le propulser avec Bottle.

Mon probleme est d' afficher des images insérées dans un template. J'ai surement un pb de routing et peut etre aussi de mimetype associé.

Le code test simule une page web où un voyageur obtiens des points en visitant des pays, la photo s' affiche, puis il s'enregistre, son profil est mémorisé dans un fichier csv (vu que je bugue déjà j'ai laissé sqlite de côté).

voici le code Flask ( j'ai mis seulement Paris pour raccourcir j'avais omis de modulariser) .

#! /usr/bin/env python3
# -*- coding:utf-8 -*-

from flask import Flask
from flask import render_template
from flask import request

from flask.ext.wtf import Form
from wtforms import StringField, SubmitField
from wtforms.validators import Required

from datetime import date, time, datetime,timedelta
import datetime 

import csv


class Visites():

    def __init__(self):

        self.paris = 0
        self.NY = 0
        self.shangai = 0
        self.totalAller = 0
        self.statut = 'amateur'
        self.voyageur = 'nom_inconnu'
        self.mdp_input = ''     

mes_Visites = Visites()

def mise_a_jour():
    mes_Visites.totalAller = (mes_Visites.paris+mes_Visites.NY+mes_Visites.shangai+mes_Visites.CT+mes_Visites.sydney+mes_Visites.dubai+mes_Visites.moscou+mes_Visites.agra+mes_Visites.rio)
    if mes_Visites.totalAller > 4:
        mes_Visites.statut = 'PREMIUM'


maintenant = datetime.datetime.now()
d = maintenant

def graver():
    fname = "out.csv"
    #file = open(fname, "wb")

    file = open('out.csv', 'a+', newline='')

    try:
        #
        # Création de l'''écrivain'' CSV.
        #
        writer = csv.writer(file)

        #
        # Écriture de la ligne d'en-tête avec le titre
        # des colonnes.
        writer.writerow( ('Pseudo','satut', 'Points','MDP') )

        #
        # Écriture des quelques données.
        writer.writerow( (mes_Visites.voyageur,mes_Visites.statut,mes_Visites.totalAller,mes_Visites.mdp_input) )

    finally:
        #
        # Fermeture du fichier source
        #
        file.close()


app = Flask(__name__)
@app.route('/')
def accueil():
    mots = ["paris", "NY", "shangai","CT", "sydney","dubai","moscou","agra"]
    mise_a_jour()

    return render_template('accueil.html', titre="Bienvenue !", mots = mots, la_date=d, mes_Visites=mes_Visites)


@app.route('/paris',methods=['GET'])    
def paris():

    mes_Visites.paris += 1
    mes_Visites.totalAller = (mes_Visites.paris+mes_Visites.NY+mes_Visites.shangai+mes_Visites.CT+mes_Visites.sydney+mes_Visites.dubai+mes_Visites.moscou+mes_Visites.agra+mes_Visites.rio)

    return render_template('paris.html')

@app.route('/smiley',methods=['GET','POST'])    
def smiley():
    if request.method == 'GET':
        return render_template('smiley.html')
    elif request.method == 'POST':
        mes_Visites.voyageur = request.form['firstname']
        return render_template('POSTAL_OK.html', mes_Visites=mes_Visites)



@app.route('/REGISTER',methods=['GET','POST'])  
def REGISTER():
    if request.method == 'GET':
        return render_template('REGISTER.html',mes_Visites=mes_Visites)
    elif request.method == 'POST':
        mes_Visites.mdp_input = request.form['mdp_input']
        graver()
        return render_template('POSTAL_OK.html', mes_Visites=mes_Visites)   


if __name__ == '__main__':
    app.run(debug=True)here
demandé 20-Fev-2015 par buffalo974 (2,632 points)

C'est quoi le problème exactement ? Montre-nous le bout de code qui merdouille.

Voici l' extrait principal version bottle, j'ai essayé plusieurs possibilités et ceci est la dernière en date.

@route('/images/<filename:re:.*\.jpg>')
def send_image(filename):
    return static_file(filename, root='./images/', mimetype='image/jpg')

@route('/static/<filename:path>')
def send_static(filename):
    return static_file(filename, root='./images/')


@app.route('/',methods=['GET'])
@get('/accueil')
def accueil():
    mots = ["paris", "NY", "shangai","CT", "sydney","dubai","moscou","agra"]
    mise_a_jour()


    return template('accueil.tpl', titre="Bienvenue !", mots = mots, la_date=d, mes_Visites=mes_Visites)



@app.route('/paris',methods=['GET'])    
def paris():

    mes_Visites.paris += 1
    mes_Visites.totalAller = (mes_Visites.paris+mes_Visites.NY+mes_Visites.shangai+mes_Visites.CT+mes_Visites.sydney+mes_Visites.dubai+mes_Visites.moscou+mes_Visites.agra+mes_Visites.rio)

    return template('paris.tpl')

@app.route('/NY',methods=['GET'])   
def NY():

    mes_Visites.NY += 1
    return template('NY.tpl')

@app.route('/shangai',methods=['GET'])  
def shangai():

    mes_Visites.shangai += 1
    return template('shangai.tpl')

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

Quand j' affiche le template, à la place de l' image j'ai :
enter image description here

Si vous avez un problème il faut le mettre dans un sujet a part et pas mettre une réponse a une question. Voyez la FAQ pour plus de détails

1 Réponse

+3 votes
 
Meilleure réponse

avec flask, tu ne gere pas les fichiers statiques via une route.
ils considerent que c'est a un serveur web de s'occuper de ca, meme si on peut quand meme.
voir la doc: http://flask.pocoo.org/docs/0.10/quickstart/#static-files

en gros, tu cree un dosser static juste a cote de ton app, et tu y mets tous tes fichiers a distribuer.
ne reste plus qu'a modifier tes templates (rien dans tes routes, contrairement a bottle) pour pointer sur tes images:

url_for('static', filename='style.css')

adapte bien sur la partie filename pour coller avec ton arborescence.

répondu 23-Fev-2015 par ashgan (698 points)
sélectionné 23-Fev-2015 par buffalo974
...