A-d-ash
A-d-ash

Reputation: 31

Image not showing up in the browser

Here's what Im trying to do.. The images I save on the database are going to the correct path. But they don't show up in the site.

@blogs.route("/post/new", methods=['GET', 'POST'])
def new_post():
    if ('user' in session and session['user'] == params["username"]):
        form = PostForm()
        if form.validate_on_submit():
            pic = save_picture(request.files['pic'])
            post = Post(title=form.title.data,
                        content=form.content.data, img=pic)
            db.session.add(post)
            db.session.commit()
            flash('Your post has been created!', 'success')
            image_file = url_for('static', filename = 'profile_pics/' + pic)
            return render_template('post.html',image_file=image_file)
        
        return render_template('create_post.html', title='New Post',
                               form=form)
    return "please login to the dashboard first. Dont try to enter without logging in!"


The HTML side

<img src="{{image_file}}" alt="error"> 

Upvotes: 0

Views: 184

Answers (2)

A-d-ash
A-d-ash

Reputation: 31

Found a fix!!

I figured out that one can use the set keyword from python as a variable to store the post.img in it and then refer it inside the source.

{% set img_name = 'profile_pics/' + post.img %}

<img src="{{url_for('static', filename = img_name)}}" alt="error"> 

Upvotes: 1

Matiiss
Matiiss

Reputation: 6156

This would be the route function:

image_file = url_for('static', filename='profile_pics/' + post.img)
return render_template('template.html', image_file=image_file)

and this is what it looks like in the template:

<img src="{{ image_file }}">

The issue is probably that You are not really able to have nested variables inside html especially because jinja probably interpreted that as a literal string

Upvotes: 0

Related Questions