How to list files of a directory with flask (using bootstraps) and python?

Solution
from flask import (
    Flask,
    render_template,
    send_from_directory
)
from flask_moment import Moment
from datetime import datetime
import os

def byte_units(value, units=-1):
    UNITS=('Bytes', 'KB', 'MB', 'GB', 'TB', 'EB', 'ZB', 'YB')
    i=1
    value /= 1000.0
    while value > 1000 and (units == -1 or i < units) and i+1 < len(UNITS):
        value /= 1000.0
        i += 1
    return f'{round(value,3):.3f} {UNITS[i]}'


app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = os.path.join(app.instance_path, 'uploads')
app.jinja_env.filters.update(byte_units = byte_units)
moment = Moment(app)

try:
    os.makedirs(app.config['UPLOAD_FOLDER'])
except:
    pass

def get_files(target):
    for file in os.listdir(target):
        path = os.path.join(target, file)
        if os.path.isfile(path):
            yield (
                file,
                datetime.utcfromtimestamp(os.path.getmtime(path)),
                os.path.getsize(path)
            )

@app.route('/')
def index():
    files = get_files(app.config['UPLOAD_FOLDER'])
    return render_template('index.html', **locals())

@app.route('/download/')
def download(filename):
    return send_from_directory(
        app.config['UPLOAD_FOLDER'],
        filename,
        as_attachment=True
    )


  
    
    Index
    {{ moment.include_moment() }}
  
  
    
    
      {% for filename, mtime, size in files -%}
      
      {% endfor -%}
    
{{ filename }} {{ moment(mtime, local=False).format('DD.MM.YYYY HH:mm') }} {{ size | byte_units }}
from flask import Flask
from flask_login import LoginManager
from flask_moment import Moment
from flask_sqlalchemy import SQLAlchemy
import os

DB_NAME = "database.db"

db = SQLAlchemy()
moment = Moment()

def byte_units(value, units=-1):
    UNITS=('Bytes', 'KB', 'MB', 'GB', 'TB', 'EB', 'ZB', 'YB')
    i=1
    value /= 1000.0
    while value > 1000 and (units == -1 or i < units) and i+1 < len(UNITS):
        value /= 1000.0
        i += 1
    return f'{round(value,3):.3f} {UNITS[i]}'

def create_app():
    app = Flask(__name__)
    app.config.from_mapping(
        SECRET_KEY=b'your secret here',
        SQLALCHEMY_DATABASE_URI='sqlite:///'+os.path.join(app.instance_path, DB_NAME),
        SQLALCHEMY_TRACK_MODIFICATIONS=False,
        UPLOAD_FOLDER=os.path.join(app.instance_path, 'uploads')
    )
    app.jinja_env.filters.update(byte_units = byte_units)

    try:
        os.makedirs(app.config['UPLOAD_FOLDER'])
    except:
        pass

    db.init_app(app)
    moment.init_app(app)

    from .models import User, Note

    create_database(app)

    login_manager = LoginManager()
    login_manager.login_view = 'auth.login'
    login_manager.init_app(app)

    @login_manager.user_loader
    def load_user(id):
        return User.query.get(int(id))

    from .views import views
    from .auth import auth

    app.register_blueprint(auth, url_prefix='/')
    app.register_blueprint(views, url_prefix='/')

    return app


def create_database(app):
    if not os.path.exists(os.path.join(app.instance_path, DB_NAME)):
        db.create_all(app=app)
        print('Created Database!')
import os
import json
from . import db
from .models import User
from flask import (
    Blueprint,
    flash,
    redirect,
    render_template,
    request,
    url_for
)
from flask_login import login_user, login_required, logout_user, current_user

auth = Blueprint('auth', __name__)

@auth.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        email = request.form.get('email')
        password = request.form.get('password')

        user = User.query.filter_by(email=email).first()
        if user:
            if check_password_hash(user.password, password):
                flash('Logged in successfully!', category='success')
                login_user(user, remember=True)
                return redirect(url_for('views.home'))
            else:
                flash('Incorrect password, try again.', category='error')
        else:
            flash('Email does not exist.', category='error')

    return render_template('login.html', user=current_user)

@auth.route('/logout')
@login_required
def logout():
    logout_user()
    return redirect(url_for('auth.login'))

@auth.route('/sign-up', methods=['GET', 'POST'])
def sign_up():
    if request.method == 'POST':
        email = request.form.get('email')
        first_name = request.form.get('firstName')
        password1 = request.form.get('password1')
        password2 = request.form.get('password2')

        user = User.query.filter_by(email=email).first()
        if user:
            flash('Email already exists.', category='error')
        elif len(email) < 4:
            flash('Email must be greater than 3 characters.', category='error')
        elif len(first_name) < 2:
            flash('First name must be greater than 1 character.', category='error')
        elif password1 != password2:
            flash('Passwords don\'t match.', category='error')
        elif len(password1) < 7:
            flash('Password must be at least 7 characters.', category='error')
        else:
            new_user = User(email=email, first_name=first_name, password=generate_password_hash(
                password1, method='sha256'))
            db.session.add(new_user)
            db.session.commit()
            login_user(new_user, remember=True)
            flash('Account created!', category='success')
            return redirect(url_for('views.home'))

    return render_template('sign_up.html', user=current_user)
from . import db
from .models import Note
from flask import Blueprint, current_app, flash, jsonify, render_template, request
from flask_login import login_required, current_user
from datetime import datetime
from werkzeug.security import generate_password_hash, check_password_hash
from werkzeug.utils import secure_filename
import os

views = Blueprint('views', __name__)

@views.route('/', methods=['GET', 'POST'])
@login_required
def home():
    if request.method == 'POST':
        note = request.form.get('note')

        if len(note) < 1:
            flash('Note is too short!', category='error')
        else:
            new_note = Note(data=note, user_id=current_user.id)
            db.session.add(new_note)
            db.session.commit()
            flash('Note added!', category='success')

    user=current_user
    files = get_files(current_app.config['UPLOAD_FOLDER'])
    return render_template('home.html', **locals())

@views.route('/delete-note', methods=['POST'])
def delete_note():
    note = json.loads(request.data)
    noteId = note['noteId']
    note = Note.query.get(noteId)
    if note:
        if note.user_id == current_user.id:
            db.session.delete(note)
            db.session.commit()

    return jsonify({})

# ---

@views.route('/about')
def about():
    return render_template('about.html', user=None)

# ---

@views.route('/upload', methods = ['GET', 'POST'])
def uploadfile():
    upload_folder = current_app.config['UPLOAD_FOLDER']
    if request.method == 'POST': # check if the method is post
        if 'file' not in request.files:
            flash('No file part')
            return redirect(request.url)

        file = request.files['file'] # get the file from the files object
        if file.filename == '':
            flash('No selected file')
            return redirect(request.url)

        file.save(os.path.join(
            upload_folder ,
            secure_filename(file.filename))) # this will secure the file

        flash('file uploaded successfully') # Display this message after uploading
    return redirect('/')

def get_files(target):
    for file in os.listdir(target):
        path = os.path.join(target, file)
        if os.path.isfile(path):
            yield (
                file,
                datetime.utcfromtimestamp(os.path.getmtime(path)),
                os.path.getsize(path)
            )

@views.route('/download/')
def download(filename):
    return send_from_directory(
        app.config['UPLOAD_FOLDER'],
        filename,
        as_attachment=True
    )


  
    
    
    
    

    {% block title %}Home{% endblock %}

    {{ moment.include_moment() }}

  
  
    

    {% with messages = get_flashed_messages(with_categories=true) %} {% if
    messages %} {% for category, message in messages %} {% if category ==
    'error' %}
    
    {% else %}
    
    {% endif %} {% endfor %} {% endif %} {% endwith %}



    
{% block content %} {% endblock %}
{% extends "base.html" -%}
{% block title %}Home{% endblock -%}
{% block content -%}

Notes

    {% for note in user.notes %}
  • {{ note.data }}
  • {% endfor %}





Datei Upload






{% for filename, mtime, size in files -%} {% endfor -%}
{{ filename }} {{ moment(mtime, local=False).format('DD.MM.YYYY HH:mm') }} {{ size | byte_units }}
{% endblock -%}