Lightbox für alle (Django Template-Filter)

Geschrieben 1 Jahr, 3 Monate zuvor

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


Bisher wurden 2 Kommentare hinterlassen

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 (Autor)

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.

Keine neuen Kommentare für diesen Beitrag mehr möglich.


Du bist hier: mahner.org » Weblog » Django & Python » Lightbox für alle (Django Template-Filter)

↑ Nach oben

© 2001–2007 Martin Mahner. The content is licensed under (cc) creative commons.
This site is powered by Django. Hosted by manitu.

Generated: Mo, 1 Dez 2008 17:41:22 +0100