Stop page from reloading after using downloader

How about this semi-solution heavily based on Creating a PDF file generator - #2 by ash2shukla

import base64
import time
import streamlit as st
import pandas as pd


def long_computation():
    time.sleep(15)
    return pd.Series(range(1000), name='number')


@st.cache
def convert_csv(data):
    return data.to_csv(index=False).encode('utf-8')


def create_download_link(val, filename):
    b64 = base64.b64encode(val)
    return f'<a href="data:application/octet-stream;base64,{b64.decode()}" download="{filename}.csv">Download file</a>'


st.write(' ... doing long computation ...')

res = long_computation()

st.success('Long computation done!')

csv = convert_csv(res)

download_url = create_download_link(csv, 'test')

st.markdown(download_url, unsafe_allow_html=True)