Files
simple-viewer/viewer/views.py

57 lines
1.9 KiB
Python

import os
from django.http import FileResponse
from django.shortcuts import render, get_object_or_404
from viewer.helpers import extra_listdir
from viewer.models import ServedDirectory
def index(request):
"""Index view for the simple-viewer project."""
directories = ServedDirectory.objects.all()
context = {'title': 'Index',
'directories': directories}
return render(request, 'index.html', context)
def browse(request, directory_id):
dir = get_object_or_404(ServedDirectory, id=directory_id)
if os.path.isdir(dir.path):
context = {
'title': f'Browse - {os.path.dirname(dir.path)}',
'files': extra_listdir(dir.path),
'directory': dir
}
return render(request, 'browse.html', context)
else:
context = {
'title': 'Invalid Directory',
'message': 'The path this server directory points to {}.'.format(
'exists, but is not a directory' if os.path.exists(dir.path) else 'does not exist'
)
}
return render(request, 'message.html', context, status=500)
def file(request, directory_id, file):
dir = get_object_or_404(ServedDirectory, id=directory_id)
if os.path.isdir(dir.path):
path = os.path.join(dir.path, file)
if os.path.exists(path):
return FileResponse(open(path, 'rb'))
else:
context = {
'title': 'Invalid File',
'message': 'The file requested from this directory was not found on the server.'
}
return render(request, 'message.html', context, status=500)
context = {
'title': 'Invalid Directory',
'message': 'The path this server directory points to {}.'.format(
'exists, but is not a directory' if os.path.exists(dir.path) else 'does not exist'
)
}
return render(request, 'message.html', context, status=500)