I'm diving into Jade for the first time using PyJade so that I can use it within Flask (and Jinja2). So far everything seems to be working and compiling correctly, though I'm wondering if this is a bug in PyJade's translation?
I'm unable to inject ternary syntax into Jade without an error. I've tried it every way suggested here.
div(class=(form.name.errors.length===0 ? 'form-group' : 'form-group has-error'))
div(class="#{form.name.errors.length===0 ? 'form-group' : 'form-group has-error'}")
My error is always
TemplateSyntaxError: unexpected '='
or
TemplateSyntaxError: unexpected char u'?' at 693
Am I doing something wrong here?
Here's a simplified code snippet
doctype html
html(lang="en")
head
title= AwesomePage
body
form.form-horizontal(method="POST", action="/timeline")
div(class="#{form.name.errors.length===0 ? 'form-group' : 'form-group has-error'}")
div.col-sm-4
#{form.name(class="form-control")}
div(class="col-sm-offset-2 col-sm-4")
input(type="submit", class="btn btn-default", value="Add Vendor")
As pyjade is rendered with python syntax... yo have to follow python syntax, so this expression will succeed in js (form.name.errors.length===0 ? 'form-group' : 'form-group has-error'))
but not in python, as the ternary operation in python is a if test else b
.
So, the solution is:
div(class=('form-group' if not len(form.name.errors) else 'form-group has-error'))