Het stonk in mijn template

In een tabel met contactmogelijkheden stond er gewoon contacttype (tekst) en contactdata (ook tekst).

Eerst was alleen GSM of telefoon mogelijk, en e-mail zat ergens anders. Daar ga ik dus toch geen aparte tabel voor maken zeker, om het lijstje (‘GSM’, ‘telefoon’) in bij te houden?

Oh, maar dan zat e-mail plots ook bij de lijst van GSM en telefoon. En dan bleek dat er ook nog Twitter bij moest. En LinkedIn natuurlijk. En soms ook eens een persoonlijke website. En aaarg voor ik het wist, zag de code in de template er zo uit, en was het einde niet in zicht:

<ul>{% for contact in contacten %}
  <li>
    {% if contact.contacttype = "gsm" %}
      GSM {{ contact.contactdata }}
    {% elif contact.contacttype = "email" %}
      <a href="mailto:{{ contact.contactdata }}">{{ contact.contactdata }}</a>
    {% elif contact.contacttype = "linkedin" %}
      <a href="{{ contact.contactdata }}">LinkedIn</a>
    {% elif contact.contacttype = "twitter" %}
      <a href="http://twitter.com/{{ contact.contactdata }}">@{{ contact.contactdata }}</a>
    {% elif contact.contacttype = "website" %}
      <a href="{{ contact.contactdata }}">{{ contact.contactdata }}</a>
    {% elif contact.contacttype = "telefoon" %}
      Tel. {{ contact.contactdata }}
    {% else %}
      {{ contact.contacttype }}: {{ contact.contactdata }}
    {% endif %}
    {% if contact.opmerking %}
      ({{ contact.opmerking }})
    {% endif %}
  </li>
{% endfor %}
</ul>

Euh ja, qua stinken kan dat tellen.

Dus maar rap properkes een tabel met contactmiddelen gemaakt, en bij elk contactmiddel in de tabel een template gezet, genre tel. % voor telefoon en <a href="http://twitter.com/%">@%</a> voor Twitter. En een formatteringsding gemaakt om de contactdata in de template te smijeren, en nu ziet de code er zo uit:

{% for c in contacten %}
  <li>
    {{ c.contactmiddel.template|formatcontact:c.contactdata|safe }}
    {% if c.opmerking %}
      ({{ c.opmerking }})
    {% endif %}
  </li>
{% endfor %}

Een mens moet zijn plezier uit kleine dingen halen, soms.