versioned_media templatetag

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import os
from django.conf import settings
from django import template

register = template.Library()

@register.simple_tag
def versioned_media(path):
    """Allows auto versioning of files based on modification times.
    Example: {% versioned_media "script.js" %} returns '/site_media/script.js?1217877755'
    """
    modification_time = os.path.getmtime(os.path.join(settings.MEDIA_ROOT, path))
    return "".join([settings.MEDIA_URL, path, "?%s" % int(modification_time)])

Comments

pigletto (on August 7, 2008):

There are two issues:

  1. AFAIK using query string parameter may cause some browsers not to cache scripts

  2. there already is nice solution for this kind of stuff: django-compress

I had my own solution, similiar to yours, but when django-compress appeared I've switched to it and so far I'm very happy with this.

#

dnordberg (on August 7, 2008):

I used django_templatecomponents which provides most of the minification and grouping features django-compress does.

In regards to the query string causing some browsers not to cache scripts, can you elaborate?

For my applications I don't really need to support older browsers.

#

dnordberg (on August 18, 2008):

Ok, so I found http://www.mnot.net/blog/2006/05/11/browser_caching

Works for:

* Firefox 1.5.2
* Internet Explorer 6.0 (XP SP2)
* Safari 2.0.3
* Opera 8.54

And above

However, with Safari and Opera, only if the expires headers are present.

FileETag None
ExpiresActive on
ExpiresDefault "access plus 10 years"

#

(Forgotten your password?)

You may use Markdown syntax here, but raw HTML will be removed.