Comment transmettre l'image téléchargée à template.html en Flacon
Je suis en utilisant flacon, et essayer de faire quelque chose de très simple en utilisant le didacticiel de démarrage rapide, juste en cours d'exécution sur ma machine (serveur local). J'produire un simple formulaire d'upload avec succès télécharge un fichier image. Je veux passer cette image comme une variable à une template.html
pour l'affichage dans une page. Le template.html
fichier s'affiche bien, mais l'image est toujours un broken link image symbol
. J'ai essayé un certain nombre de chemins différents, mais j'ai le sentiment que je suis en train de faire des choses un peu mal.
import os
from flask import Flask, request, redirect, url_for, send_from_directory,
render_template
UPLOAD_FOLDER = '/home/me/Desktop/projects/flask/uploads'
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
@app.route('/', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
file = request.files['file']
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return redirect(url_for('uploaded_file', filename=filename))
return '''
<!doctype html>
<title>Upload new File</title>
<h1>Upload new File</h1>
<form action="" method=post enctype=multipart/form-data>
<p><input type=file name=file>
<input type=submit value=Upload>
</form>
'''
@app.route('/uploads/<filename>')
def uploaded_file(filename):
filename = 'http://127.0.0.1:5000/uploads/' + filename
return render_template('template.html', filename = filename)
if __name__ == '__main__':
app.run()
C'est template.html
:
<!doctype html>
<title>Hello from Flask</title>
{% if filename %}
<h1>some text<img src="{{filename}}"> more text!</h1>
{% else %}
<h1>no image for whatever reason</h1>
{% endif %}
Comment puis-je passer le téléchargé le fichier de l'image template.html
de sorte qu'il affiche correctement?
Grâce
OriginalL'auteur fraxel | 2012-06-29
Vous devez vous connecter pour publier un commentaire.
Ce qui se passe maintenant, c'est que
/uploads/foo.jpg
retourne le code HTML à l'intérieur template.html. Là, vous essayez d'utiliser/uploads/foo.jpg
comme la source de la balise img. Nulle part vous servir de l'image réelle.Nous allons le modifier comme ceci:
/show/foo.jpg
renvoie la page HTML et et/uploads/foo.jpg
renvoie l'image. Remplacer le dernier itinéraire avec ces deux et vous devriez être bon d'aller:le
<img>
numéro de série dans le modèle de points de/uploads/<filename>
, qui est acheminé à send_file.Salut @Miikka je suis en train d'essayer cela sur le serveur cloud. La même logique n'est pas un travail pour moi. Il montre le chemin de l'image à l'intérieur de la src de la balise. Pouvez-vous s'il vous plaît suggérer quelque chose ??
OriginalL'auteur Miikka
De la uploaded_file fonction, nous nous dirigeons vers le template.html et il y aura êtes redirigé
<img src="{{ url_for('send_file', filename=filename) }}">
retour, nous avons touché le send_file fonction qui affiche le contenu de l'HTML à l'intérieur du modèle avec l'image téléchargée et stockée dans la UPLOAD_FOLDER spécifié. vous sont également absentsfrom werkzeug import secure_filename
cette py fichierMaintenant votre template.html va ressembler..
Si l'instruction est correcte, check this out flask.pocoo.org/docs/0.12/tutorial/templates
Je suis la recherche de la fiole manuel impossible à suivre. J'ai été codage plus de 10 ans en python, 30 ans dans la programmation et n'ont jamais vu de telles effroyable de la documentation. J'ai essayé les exemples de 3-4 pages différentes et aucun de la syntaxe est correcte. utilisation de fonctions avec le même nom par exemple ne fonctionne pas dans le flacon 0.12.4. nom de fichier n'est pas réellement représenter le chemin d'accès au fichier sur le disque et d'avoir accès à des chemins d'accès de fichier nécessite un deuxième chemin d'accès si vous utilisez absolue chemins d'accès aux fichiers. Rien de tout cela est dans la documentation. heures de débogage et de la conjecture.
OriginalL'auteur Transformer