Aug. 16, 2007 Next × Previous Lightbox für alle (Django Template-Filter)

Seit Jahr und Tag verwende ich das bekannte Lightbox um die Großversion von Vorschaubildern anzuzeigen. Dazu muss lediglich das Attribut rel="lightbox an den Link gesetzt werden. Leider war ich nicht ganz so konsequent in der Nutzung so das einige Bilder in Blogbeiträgen Lightbox unterstützen, bei anderen habe ich es vergessen.

Diesem Umstand habe ich nun mit einem kleinen Template-Filter nachgeholfen:

import re
from django.utils.encoding import smart_unicode

r_lightbox = re.compile('<a (?=[^>]*\.(jpg|gif|png))(?![^>]*lightbox)')
s_lightbox = '<a rel="lightbox" '

@register.filter
def lightbox(content):
    return r_lightbox.sub(s_lightbox, smart_unicode(content))

Der Aufruf in meinem Template schaut dann so aus:

{{ Entry.body_text|markdown|lightbox }}

Der Filter erkennt, ob ein Link auf eine .jpg, .gif oder .png Datei leitet und fügt -- wenn nicht schon vorhanden -- das rel="lightbox" Attribut hinzu. Ein kleiner Bug steckt noch drin, so würde z.B. ein Link zu http://www.jpgmag.com/ auch als Bild gewertet werden (da .jpg im String vorkommt), aber damit kann ich leben. :-)


  • Reply in this thread Marco Gabriel Aug. 16, 2007

    du setzt doch auf deiner seite auch jquery ein. damit würd's noch einfacher und ohne regex gehen. ne passende lösung hab ich gerade nicht zur hand, aber da lightbox ja auch js-only ist, würde sich das doch ergänzen.

    1. Used for the gravatar, only!
    2. Look right
    3. or
  • Reply in this thread Martin Aug. 17, 2007

    Mit JQuery würde es sicher auch gehen, aber mir gefällt die Idee nicht, diese Arbeit auf den Client auszulagern.

    Der Server macht das für lau und höchstwahrscheinlich schneller. Wenn man Caching einsetzt bzw. den Beitrag danach neu speichert bleibt es zudem noch eine einmalige Sache.

    1. Used for the gravatar, only!
    2. Look right
    3. or

Leave a comment

  1. Used for the gravatar, only!
  2. Look right
  3. or

↑ to the elevators

© 2001—2009 Martin Mahner. This is an I ♥ Django Project.

Admin | Generated: Sat, 4 Jul 2009 09:00:35 +0200