41
votes

I am using Flask(as framework) and MongoDB(as database server). Right now, all i can do is just pass one argument that i got from the database:

@app.route('/im/', methods=['GET', 'POST'])
def im_research(user=None):
    error = None
    if request.method == 'POST':
        if request.form['user']:
            user = mongo.db.Users.find_one_or_404({'ticker':request.form['user']})
            return redirect(url_for('im_user',user= user) )
        else:
            flash('Enter a different user')
            return redirect(url_for('im'))
    if request.method == 'GET':
       return render_template('im.html', user= None)

How do i pass multiple variables from the database: eg: in my Mongo database: i have these things in my database and i would like to pass them all to my template.

{
users:'xxx'
content:'xxx'
timestamp:'xxx'
}

Is it possible to do that by using Flask?

3

3 Answers

72
votes

You can pass multiple parameters to the view.

You can pass all your local variable

@app.route('/')
def index():
  content = """
     teste
   """
  user = "Hero"
  return render_template('index.html', **locals())

or just pass your data

def index() :
    return render_template('index.html', obj = "object", data = "a223jsd" );

api doc

17
votes
return render_template('im.html', user= None, content = xxx, timestamp = xxx)

You can pass as many variables as you need. The api

excerpt:

flask.render_template(template_name_or_list, **context) Renders a template from the template folder with the given context.

Parameters: template_name_or_list – the name of the template to be rendered, or an iterable with template names the first one existing will be rendered context – the variables that should be available in the context of the template.

4
votes

It is also possible to pass a list to render_template's context variables, and refer to its elements with Jinja's syntax in HTML.

example.py

l = [user, content, timestamp]
return render_template('exemple.html', l=l)

exemple.html

...
<body>
    {% for e in l %}
        {{e}}
    {% endfor %}
</body>
...