Jinja Template Stuff

From PeformIQ Upgrade
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Also see - Flask Stuff


References

Questions and Explanations

Examples

    {% for link in links %}

            <li><a href="{{ link }}">{{ link }}</a></li>

    {% endfor %}
Number of links is: {{ links|length }}
{% set myvar = "David" %}
My variables: {{ myvar }}
{% for link in links %}
    {{ myvar }}
    {% set myvar = 'Changed' %}
{% endfor %}
{{ myvar }}


<img src="Template:Url for('static', filename = 'css/images/icons/resultset previous.png')" width="16" height="16" alt="previous" title="Previous" border="0">


def tech_pro(name='Tech.Pro'):
    return render_template('message.html', **locals())


def tech_pro(name='Tech.Pro'):
    links = get_links()
    return render_template('message.html', **locals())


def get_links():
    links = ['http://www.tech.pro/article1',
             'http://www.tech.pro/article2',
             'http://www.tech.pro/article3']
    return links


<p>
<h3>My Articles:</h3>

<ul>
    {% for link in links %}

            <li><a href="{{ link }}">{{ link }}</a></li>

    {% endfor %}
</ul>
</p>

A More Complete Example

import os
from flask import Flask
from jinja2 import Environment, FileSystemLoader
from random import randint

# Start the Flask application
app = Flask(__name__)

# Define the template directory
tpldir = os.path.dirname(os.path.abspath(__file__))+'/templates/'

# Setup the template enviroment
env = Environment(loader=FileSystemLoader(tpldir), trim_blocks=True)

# Define a route for the webserver
@app.route('/')
def index():
  
  # define a random skill level
  skill_level = randint(0,100)
      
  # generate template and assign variables
  output = env.get_template('example.html').render(
    skill_level=skill_level
  )
  
  # return the output
  return output

# Listen to port 80
if __name__ == '__main__':
	app.run( 
        host="0.0.0.0",
        port=int("80")
  )
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title></title>
  <meta name="description" content="Using `if` statements in templates [Python, Flask and Jinja2]">
  <meta name="author" content="Richard Ruiter">
</head>
<body>

  <h1>Your skill level is:</h1>
  
  <p>
  {% if skill_level >= 0 and skill_level < 25 %}
    Beginner
  {% elif skill_level >= 25 and skill_level < 50 %}
    Intermediate
  {% elif skill_level >= 50 and skill_level < 75 %}
    Advanced
  {% else %}
    Expert
  {% endif %}
  </p>
  
</body>
</html>

Zip

you need zip() but it isn't defined in jinja2 templates.

one solution is zipping it before render_template function is called, like:

view function:

return render_template('form_result.html',type=type,reqIDs_msgs_rcs=zip(IDs,msgs,rcs))

template:

{% for reqID,msg,rc in reqIDs_msgs_rcs %}
<h1>ID - {{ID}}</h1>
{% if rc %}
<h1>Status - {{msg}}!</h1>
{% else %}
<h1> Failed </h1>
{% endif %}
{% endfor %}

also, you can add zip to jinja2 template global, using Flask.add_template_x functions(or Flask.template_x decorators)

@app.template_global(name='zip')
def _zip(*args, **kwargs): #to not overwrite builtin zip in globals
    return __builtins__.zip(*args, **kwargs)