What is the best way to format a button macro?
You could factor out that repeated class=... like so:

{% macro _btnClass(type, colour, size, fullWidth) %}
    class="btn {{ type }} {{ colour }} {{ size }}{% if fullWidth %} btn-block{% endif %}"
{% endmacro %}

{% macro span(type, text, colour, size, fullWidth, url) -%}
{% import _self as self %}
    &lt;span {{ self._btnClass(type, colour, size, fullWidth) }}&gt;{{ text }}&lt;/span&gt;
{% endmacro -%}


It is not clear from your question how you decide which buttons macro to call. Perhaps that code needs to be made DRYer.