Skip to content

Commit 1d6ac14

Browse files
Merge pull request #7 from app-generator/file-manager
File manager
2 parents e86c4de + 1a8a8b2 commit 1d6ac14

File tree

5 files changed

+48
-19
lines changed

5 files changed

+48
-19
lines changed

home/urls.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
from django.urls import path
1+
from django.urls import path, re_path
22

33
from . import views
44

55
urlpatterns = [
66
path('', views.index, name='index'),
7-
path('file-manager/', views.file_manager, name='file-manager'),
7+
path('file-manager/', views.file_manager, name='file_manager'),
8+
re_path(r'^file-manager/(?P<directory>.*)?/$', views.file_manager, name='file_manager'),
89
path('delete-file/<str:file_path>/', views.delete_file, name='delete_file'),
910
path('download-file/<str:file_path>/', views.download_file, name='download_file'),
1011
path('upload-file/', views.upload_file, name='upload_file'),

home/views.py

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ def index(request):
1717

1818
def get_files_from_directory(directory_path):
1919
files = []
20-
for root, _, filenames in os.walk(directory_path):
21-
for filename in filenames:
22-
file_path = os.path.join(root, filename)
20+
for filename in os.listdir(directory_path):
21+
file_path = os.path.join(directory_path, filename)
22+
if os.path.isfile(file_path):
2323
files.append({
2424
'file': file_path.split('/media/')[1],
2525
'filename': filename,
@@ -28,23 +28,36 @@ def get_files_from_directory(directory_path):
2828
return files
2929

3030

31-
def file_manager(request):
31+
def get_breadcrumbs(request):
32+
path_components = [component for component in request.path.split('/') if component]
33+
breadcrumbs = []
34+
url = ''
35+
36+
for component in path_components:
37+
url += f'/{component}'
38+
breadcrumbs.append({'name': component, 'url': url})
39+
40+
return breadcrumbs
41+
42+
43+
def file_manager(request, directory=''):
3244
media_path = os.path.join(settings.MEDIA_ROOT)
3345
directories = generate_nested_directory(media_path, media_path)
34-
selected_directory = request.GET.get('directory', '')
46+
selected_directory = directory
3547

3648
files = []
37-
if selected_directory:
38-
selected_directory_path = os.path.join(media_path, selected_directory)
39-
if os.path.isdir(selected_directory_path):
40-
files = get_files_from_directory(selected_directory_path)
49+
selected_directory_path = os.path.join(media_path, selected_directory)
50+
if os.path.isdir(selected_directory_path):
51+
files = get_files_from_directory(selected_directory_path)
52+
53+
breadcrumbs = get_breadcrumbs(request)
4154

4255
context = {
4356
'directories': directories,
4457
'files': files,
4558
'selected_directory': selected_directory,
4659
'segment': 'file_manager',
47-
'MEDIA_ROOT': settings.MEDIA_ROOT
60+
'breadcrumbs': breadcrumbs
4861
}
4962
return render(request, 'pages/file-manager.html', context)
5063

templates/includes/sidebar.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@
131131
</a>
132132
</li>
133133
<li class="nav-item">
134-
<a class="nav-link {% if 'wallet' in segment %}active{% endif %}" href="{% url 'file-manager' %}">
134+
<a class="nav-link {% if 'wallet' in segment %}active{% endif %}" href="{% url 'file_manager' %}">
135135
<div class="icon icon-shape icon-sm px-0 text-center d-flex align-items-center justify-content-center">
136136
<svg width="30px" height="30px" viewBox="0 0 48 48" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
137137
<title>wallet</title>

templates/includes/subdirectories.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
class="ms-{{depth}} collapse {% if subdirectory.name in request.get_full_path %} show {% endif %} "
2323
>
2424
<i class="fa-solid fa-folder"></i>
25-
<a href="?directory={{subdirectory.path}}">{{ subdirectory.name }}</a>
25+
<a href="{% url 'file_manager' subdirectory.path %}">{{ subdirectory.name }}</a>
2626
</li>
2727
{% endif %}
2828
{% endfor %}

templates/pages/file-manager.html

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,18 @@
1212
{% block content %}
1313
<div class="container-fluid py-4 px-5">
1414
<div class="row">
15-
<div class="col-lg-3">
15+
<div class="col-lg-3 border py-2">
16+
<nav aria-label="breadcrumb">
17+
<ol class="breadcrumb">
18+
{% for breadcrumb in breadcrumbs %}
19+
{% if forloop.last %}
20+
<li class="breadcrumb-item active" aria-current="page">{{ breadcrumb.name }}</li>
21+
{% else %}
22+
<li class="breadcrumb-item"><a href="{{ breadcrumb.url }}">{{ breadcrumb.name }}</a></li>
23+
{% endif %}
24+
{% endfor %}
25+
</ol>
26+
</nav>
1627
<ul class="">
1728
{% for directory in directories %}
1829
{% if directory.directories %}
@@ -27,13 +38,13 @@
2738
{% else %}
2839
<li>
2940
<i class="fa-solid fa-folder"></i>
30-
<a href="?directory={{directory.path}}">{{ directory.name }}</a>
41+
<a href="{% url 'file_manager' directory.path %}">{{ directory.name }}</a>
3142
</li>
3243
{% endif %}
3344
{% endfor %}
3445
</ul>
3546
</div>
36-
<div class="col-lg-9">
47+
<div class="col-lg-9 border py-2">
3748
{% if files %}
3849
<div class="d-flex justify-content-end mb-3">
3950
<label for="fileInput">
@@ -56,9 +67,13 @@
5667
<video height="170px" data-bs-toggle="modal" data-bs-target="#file-{{forloop.counter}}" class="w-100"
5768
src="/media/{{ file.file }}"></video>
5869
{% else %}
59-
<object data="/media/{{ file.file }}" type="application/pdf" width="100%" height="170px">
70+
{% if file.file|file_extension in ".csv, .txt" %}
6071
<a href="/media/{{ file.file }}">{{ file.filename }}</a>
61-
</object>
72+
{% elif file.file|file_extension == '.pdf' %}
73+
<object class="d-block" data="/media/{{ file.file }}" type="application/pdf" width="100%" height="170px">
74+
<a href="/media/{{ file.file }}">{{ file.filename }}</a>
75+
</object>
76+
{% endif %}
6277
{% endif %}
6378
<!-- Modal -->
6479
<div class="modal fade" id="file-{{forloop.counter}}" data-bs-backdrop="static" data-bs-keyboard="false"

0 commit comments

Comments
 (0)