2013-11-26 3 views
1

У меня есть приложение, которое позволяет загружать файлы в папку MEDIA. Я применил метод удаления, поэтому он удаляет файлы как из базы данных, так и из моего диска. Я хочу, чтобы удалить все пустые каталоги, поэтому вместо:Удалить пустые каталоги в Django

СМИ \ документы \ 2013 \ 11 \ 26

у меня будет

СМИ \

при условии отсутствия файлов. Мой метод удаления в views.py выглядит следующим образом:

def delete(request): 
    if request.method != 'POST': 
     raise HTTP404 

    docId = request.POST.get('docfile', None) 
    docToDel = get_object_or_404(Document, pk = docId) 
    docToDel.docfile.delete() 
    docToDel.delete() 

    return HttpResponseRedirect(reverse('myapp.views.list')) 

Я нашел код Python, чтобы сделать это, и я пытался добавить его до возвращения заявления: код здесь: http://deathofagremmie.com/archive/2013/05/1/ И так, я пытался добавить, что:

empty_dirs = [] 

for root, dirs, files in os.walk(MEDIA_ROOT): 
    if not len(dirs) and not len(files): 
     empty_dirs.append(root) 

for path in empty_dirs: 
    os.removedirs(path) 

Это, к сожалению, ничего не делает. Как удалить эти пустые DIR?

ответ

2

1- Какая у вас MEDIA_ROOT? Это /media/ в ваших настройках? Если это так, вам может понадобиться сделать os.path.join, чтобы предоставить os.walk абсолютный путь к корню медиа, а не относительный путь.

2- После того, как у вас есть абсолютный путь, сделать это, чтобы удалить ваш пустой каталог

import os 
for root, dirs, files in os.walk(MEDIA_ROOT_ABS_PATH): 
    for d in dirs: 
      dir = os.path.join(root, d) 
      # check if dir is empty 
      if not os.listdir(dir): 
       os.rmdir(dir) 
+0

В этом же файле (views.py) У меня есть: вверху PROJECT_ROOT = os.path.abspath (Os .path.dirname (__ file__)) MEDIA_ROOT = os.path.join (PROJECT_ROOT, 'media') , но он не работает, dirs все еще там. – Fengson

+0

Может ли кто-нибудь мне помочь? Это сводит меня с ума ..: < – Fengson

Смежные вопросы