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
Post a Comment