I have code similar to the following in one of my jinja template
{% for post in posts %}
{% include ["posts/" + post.type + ".html", "posts/default.html"] %}
{% endfor %}
which is supposed to render each post
inside the posts
collection, depending on the .type
of the post. I have a different template setup for each post.type
. And for those I don't have a template, it reverts to the default
post template.
Now, I want the index of the post being displayed from bottom, inside the post templates, which is provided by loop.revindex
. But for some reason, if I use loop.revindex
inside the post template, I get a error saying UndefinedError: 'loop' is undefined
.
So, is loop
not available in the include
d templates? Is this by design? Am I doing something wrong with how I organised my templates for this to be not available?
Edit Okay, I came up with a workaround, in the for loop, before I include my template, I do
{% set post_index = loop.revindex %}
and use post_index
inside the post template. Not ideal, but seems like the only way. I still want to know your solutions though.
Edit 2 One other thing, I am able to access the post
variable inside the include
d template, but not the loop
variable.
If might be possible with the {% with %}
statement.
Try this:
{% with %}
{% set loop_revindex = loop.revindex %}
{% include ... %}
{% endwith %}
Instead of using loop.revindex
in the included template, use loop_revindex
.
Another option is to pass the entire loop
variable into the included template by setting a local variable to loop
{% for post in posts %}
{% set post_loop = loop %}
{% include ["posts/" + post.type + ".html", "posts/default.html"] %}
{% endfor %}
This gives you access to all of the loop
s properties, and, to me, makes it more clear in the included template what the variable is.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With