0

私はこのステップで立ち往生しています:

uploadフォルダーの下のフォルダーにファイルを保存するアップロード機能がありmediaます。これらのファイルは、ファイルをアップロードしているユーザーの名前で同時に作成されるフォルダーに保存されます。uploadファイルを含むこれらのフォルダーは、フォルダーの下のフォルダーの下に作成されmediaます

def custom_path(instance, filename):
return '/'.join(['upload',instance.student.user.username,filename])

class Doc(models.Model):
    uploadtime = models.DateTimeField(auto_now_add=True, blank=True)
    datei = models.FileField(upload_to=custom_path,default='')

今私がやりたいことは次のとおりです。

1) 特定のフォルダ名を検索します 2) 見つかった場合は調べます - 見つからない場合は作成します。

特定のフォルダの下にあるすべてのフォルダ名を取得するにはどうすればよいですか? または、フォルダーをループして名前を取得するにはどうすればよいですか?

これを行う場合:フォルダーos.path.abspath(os.path.join(os.path.dirname( __file__ ), os.pardir, 'media/upload'))へのパスを取得していuploadます。このパスの下にあるフォルダー名を検索する方法がわからず、少し混乱しています

どんな声明も高く評価されます

4

2 に答える 2

2
def custom_path(instance, filename):
    path = os.path.join('upload', 'media', slugify(instance.student.user.username))
    try:
        os.path.mkdir(path)
    except OSError:
        # path already exists
        pass

slugifyユーザー名にファイル名として許可されていない特殊文字が含まれている場合は、ここを使用します。

os.path.mkdirディレクトリがOSError既に存在する場合に発生します。

最後に、os.path.joinパスを正しく作成するには、ディレクトリ パスを返すため、ファイル名コンポーネントは必要ありません。

于 2013-08-30T18:53:45.753 に答える
1

覚えておきたいことの 1 つは、media/uploadの下に多数のサブディレクトリがあると、最終的にそのディレクトリへのアクセスが非常に遅くなるということです。私の経験では、ディレクトリの下に約 1000 個のディレクトリ/ファイルがあると、アクセス時間が悪化し始めます。

そうなると予想される場合は、代わりにユーザーのファイルを DB に格納するように設計を変更することをお勧めします。

于 2013-08-30T23:30:38.247 に答える