["python","css","if-statement","jinja2"]
Jinja2 template not rendering if-elif-else statement properly

I am trying to set the text color using css in a jinja2 template. In the following code I want to set the output string to print in a specific font color if the variable contains a string. Everytime the template is generated though it prints in red due to the else statement, it never see the first two conditions even though the output should be matched, I can tell what the output from the variable is when the table generates and it is as expected. I know my css is correct due to the printing of the string in red by default. My first thought was to enclose the string I was checking for in quotes but that didn't work. Next was that jinja was not expanding RepoOutput[RepoName.index(repo)] but the for loop above it works, RepoName is expanded upon properly. I know if I add the braces it will print the variable which I am fairly certain will either break the template or just not work. I tried looking at these sites and went through the list of global expressions as well but couldn't find any examples similar to mine or a direction in which to look further. http://jinja.pocoo.org/docs/templates/#if http://wsgiarea.pocoo.org/jinja/docs/conditions.html {% for repo in RepoName %} <tr> <td> <a href="http://mongit201.be.monster.com/icinga/{{ repo }}">{{ repo }}</a> </td> {% if error in RepoOutput[RepoName.index(repo)] %} <td id=error> {{ RepoOutput[RepoName.index(repo)] }} </td> <!-- I want this in green if it is up-to-date, otherwise I want it in red --> {% elif Already in RepoOutput[RepoName.index(repo)] %} <td id=good> {{ RepoOutput[RepoName.index(repo)] }} </td> <!-- I want this in green if it is up-to-date, otherwise I want it in red --> {% else %} <td id=error> {{ RepoOutput[RepoName.index(repo)] }} </td> <!-- I want this in green if it is up-to-date, otherwise I want it in red --> </tr> {% endif %} {% endfor %} Thanks
You are testing if the values of the variables error and Already are present in RepoOutput[RepoName.index(repo)]. If these variables don't exist then an undefined object is used. Both of your if and elif tests therefore are false; there is no undefined object in the value of RepoOutput[RepoName.index(repo)]. I think you wanted to test if certain strings are in the value instead: {% if "error" in RepoOutput[RepoName.index(repo)] %} <td id="error"> {{ RepoOutput[RepoName.index(repo)] }} </td> {% elif "Already" in RepoOutput[RepoName.index(repo)] %} <td id="good"> {{ RepoOutput[RepoName.index(repo)] }} </td> {% else %} <td id="error"> {{ RepoOutput[RepoName.index(repo)] }} </td> {% endif %} </tr> Other corrections I made: Used {% elif ... %} instead of {$ elif ... %}. moved the </tr> tag out of the if conditional structure, it needs to be there always. put quotes around the id attribute Note that most likely you want to use a class attribute instead here, not an id, the latter must have a value that must be unique across your HTML document. Personally, I'd set the class value here and reduce the duplication a little: {% if "Already" in RepoOutput[RepoName.index(repo)] %} {% set row_class = "good" %} {% else %} {% set row_class = "error" %} {% endif %} <td class="{{ row_class }}"> {{ RepoOutput[RepoName.index(repo)] }} </td>