Link Media Command

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from django.core.management.base import NoArgsCommand

class Command(NoArgsCommand):
    help = """
Removes all symlinks in MEDIA_ROOT and then scans all installed applications for a media folder to symlink to MEDIA_ROOT.

If installed app has a media folder, it first attempts to symlink the contents
    ie:   app/media/app_name -> MEDIA_ROOT/app_name
    
If the symlink name already exists, it assumes the media directory is not subfoldered and attempts:
    ie:  app/media -> MEDIA_ROOT/app_name"""
    
    def handle_noargs(self, **options):
        from django.conf import settings
        import os
        
        media_path = settings.MEDIA_ROOT
        for d in os.listdir(media_path):
            path = os.path.join(media_path,d)
            if os.path.islink(path):
                os.remove(os.path.join(path))
                print " - removed %s" % path
        
        for app in settings.INSTALLED_APPS:
            app_path = __import__(app, {}, {}, [app.split('.')[-1]]).__path__
            if 'media' in os.listdir(app_path[0]) and os.path.isdir(os.path.join(app_path[0],'media')):
                app_media = os.path.join(app_path[0],'media')
                try:
                    for node in os.listdir(app_media):
                        os.symlink(os.path.join(app_media,node), os.path.join(media_path,node))
                        print " + added %s as %s" % (os.path.join(app_media,node), os.path.join(media_path,node))
                except OSError, e:
                    try:
                        os.symlink(app_media, os.path.join(media_path,app.split('.')[-1]))
                        print " + added %s as %s" % (app_media, os.path.join(media_path,app.split('.')[-1]))
                    except OSError,e:
                         print "ERROR: cannot add media from %s" % app

More like this

  1. Shortcuts to your code organized by type (views, models, admin, ...) by stdbrouw 3 years, 2 months ago
  2. manage.py reboot by givity 1 year, 4 months ago
  3. collectmedia command: Copy or link media files from installed apps by exogen 4 years, 8 months ago
  4. Quiet runserver by danielroseman 2 years, 11 months ago
  5. syncdata command by graham 4 years, 10 months ago

Comments

(Forgotten your password?)