ento
ento

Reputation: 5889

Can I suppress newlines after each template tag with Django's template engine?

In Rails ERB, you can suppress newlines by adding a trailing hyphen to tags:

<ul>
  <% for @item in @items -%>
    <li><%= @item %></li>
  <% end -%>
</ul>

becomes:

<ul>
    <li>apple</li>
    <li>banana</li>
    <li>cacao</li>
</ul>

Is there a way to do this in Django? (Disclosure: I'm generating a csv file with Django)

Edit: Clarified that the newlines I'm hunting down are the ones left behind after the template tags.

Upvotes: 15

Views: 6293

Answers (5)

user2918461
user2918461

Reputation:

It is 2016 now, and I think this issue is still present. In this tutorial https://www.youtube.com/watch?v=vQjmz9wCjLA at around 1:45 a unittest of a template shows that there is a trailing newline on the end of the tag.

Upvotes: 1

Almad
Almad

Reputation: 5893

{% spaceless %}
<ul>
    <li>apple</li>
    <li>banana</li>
    <li>cacao</li>
</ul>
{% endspaceless %}

I am not aware about any way to discard template tags lines. I'd vote for opening bug report.

Upvotes: 3

CodeBlock
CodeBlock

Reputation: 198

The closest I've found to what you're looking for (I'm looking for the same thing) is talk about a future patch, here: http://code.djangoproject.com/ticket/2594.

Unfortunately, it looks like there's not much you can do until they merge that patch in.

Upvotes: 4

jweyrich
jweyrich

Reputation: 32240

For example:

<ul>
{% for obj in list %}
    <li>{{ obj|linebreaksbr|striptags }}</li>
{% endfor %}
</ul>

Or this, which also strips whitespaces/tabs/etc, between HTML tags:

{{ spaceless }}
<ul>
{% for obj in list %}
    <li>{{ obj }}</li>
{% endfor %}
</ul>
{{ endspaceless }}

Upvotes: 1

Bloeper
Bloeper

Reputation: 357

When you write a template, you could open the ul hardcoded in the template and looping trought items en returning there value with the in it.

As far as i know there isn't a default function for that.

Upvotes: 0

Related Questions