Hello Si,
There's no way to do this I'm afraid - the block's template only receives the block value, which has no knowledge of its position in the list. (In many cases, that value will be a simple data type such as a string.) We could possibly update this so that the template is passed the index as well, but I'm not sure it would be good design to do so - block rendering should really work the same regardless of whether the block is part of a list or not (e.g. a child of a StructBlock). In this case, I'd say that "does this block get an arrow or not" is behaviour relating to the sequence, rather than the individual blocks, so it would be more appropriate for the outer template to handle this, as in:
<ul>
{% for block in page.body %}
<li>
{% if forloop.first %}<a href="#">down</a>{% endif %}
{{ block }}
</li>
{% endfor %}
</ul>
- which does mean that the portion rendered by the {{ block }} is probably smaller than you were hoping for (e.g. it can't include the <li> tag), but I think that's a good thing from the point of view of keeping the overall structural markup separate from the individual block templates.
Cheers,
- Matt