python - Jinja2 templates If condition not working correctly -


i have if-statement in jinja2 template in complete.html, doesn't run right code regardless if if-condition true or false.

i call redirect url view function renders it, carrying variable determines condition of if-loop. printed out condition , it's correct, if-loop doesn't run correct code. missing causing if-statement not work correctly.

my code:

view.py

@app.route('/', methods=['get', 'post']) def home():     form = courseform()      if form.validate_on_submit():         course_name = form.cname.data.upper()         course_id = form.cid.data         course_sec = form.sec.data.upper()         email = form.email.data.lower()         reserved = form.reserved.data          result = checkcourse(course_name, course_id, course_sec)         if result not none:             flash('unable find course')         else:             known = false             course = course.query.filter_by(cname=course_name, cid=course_id, sec=course_sec).first()             if course none:                 course = course(cname=course_name, cid=course_id, sec=course_sec)                 db.session.add(course)                 db.session.flush()                 user = user(email=email, course_id=course.id, reserved=reserved)                 db.session.add(user)             else:                 ckey = course.id                 result = checkuser(email, ckey, reserved)                 if result != none:                     known = true                 else:                     user = user(email=email, course_id=ckey, reserved=reserved)                     db.session.add(user)             db.session.commit()             return redirect(url_for('complete', known=known))     return render_template('home.html', form=form)  @app.route('/complete') def complete():     known = request.args.get('known', type=string)     app.logger.debug(known)     return render_template('complete.html', known=known) 

templates:

base.html

{% extends "bootstrap/base.html" %}  {% block title %}ubc course alert{% endblock %}  {% block styles %} {{super()}} <link rel="stylesheet"       href="{{url_for('.static', filename='home.css')}}"> {% endblock %}  {% block content %} <div class="jumbotron">     <div class="container">         {% block page_content %}{% endblock %}     </div> </div> {% endblock %} 

complete.html

{% extends "base.html" %} {% import "bootstrap/wtf.html" wtf %}  {% block page_content %}  <p> {% if known %}   added course. you'll receive email there's space :) {% else %}   registering course, you'll receive email there's space! {% endif %} </p>  {% endblock %} 

you converted variable known string; it'll contain either string value 'true' or 'false'. these not boolean values, rather strings of either 4 or 5 characters long. both strings seen true values, non-empty.

you'll either have translate string boolean, or leave known value empty indicate false value.

converting boolean easy as:

known = request.args.get('known', type=string) == 'true' 

while using empty value false this:

return redirect(url_for('complete', known='1' if known else '')) 

and

known = request.args.get('known', default='', type=bool) 

Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -