Search code examples
pythonmako

Inline if statement escapes HTML characters


So I'm playing with Mako on Pyramid and I'm trying to do inline if statements.

<li>${'<a href="#">Opinions</a></li>' if whichnav == 'opinions' else 'Opinions'}

Outputs:

<li>&lt;a href=&#34;#&#34;&gt;Opinions&lt;/a&gt;&lt;/li&gt;

Whereas:

% if whichnav =='opinions':
      <li><a href="#">Opinions</a></li>
% else:
      <li>Opinions</li>
% endif

Outputs correctly without escaping the HTML characters:

<li><a href="#">Opinions</a></li> 

I want to make my code as clean as possible so inline if statements are preferable, but I don't understand why HTML characters are escaped whereas using % they are not. Thanks!


Solution

  • Looks like your HTML is being escaped. What happens if you change your inline if to this:

    ${'<a href="#">Opinions</a></li>' if whichnav == 'opinions' else 'Opinions' | n}
    

    (Edit: Put the | n to disable the filtering AFTER the conditional).