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. :-)


  • 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.

  • 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.


Comments closed

Sorry, new comments are no longer allowed for this entry.

Write me an email if you have feedback or any questions regarding this post. If you found this post useful and just want to say thank you then don't forget that I have an Amazon Wishlist. :-)


↑ to the elevators

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

Admin | Generated: Wed, 1 Sep 2010 12:49:09 +0200