URL redirect inside a button

Hey! How can I open the url in the same tab of the browser? webbrowser didn’t help, it always opens a new tab and google search confirmed it’s not possible I used to have a hyperlink which opened the url in the same window

st.write(f'''<h1>
Please login via <a target="_self"
href="{authorization_url}">Google</a></h1>''',
unsafe_allow_html=True)

But I want a button that triggers URL redirect

login = st.button('Log in')
if login:
  webbrowser.open(authorization_url)

I guess I could extract that redirect function from st.write above but I have no experience in html and this code isn’t mine haha

I need this to run google auth inside the app.

You can create a button manually. Unfortunately I couldn’t find a way to style the button persistently across Streamlit versions (class hashes change each version).

import streamlit as st

st.write(f'''
    <a target="_self" href="https://eox.at">
        <button>
            Please login via Google
        </button>
    </a>
    ''',
    unsafe_allow_html=True
)
3 Likes

Thank you! That’s what I was looking for.

But well, the button looks ugly indeed.

1 Like

Did it work for you ? It works on local but do we need install anything on the server when we deploy the app.

webbrowser.open(authorization_url)

你好,想请教一下,webbrowser.open(url)在win环境可以跳转到新的tab页,但是在linux环境下无法使用,请问有什么解决的办法吗?

I found the best way to redirect to the same page or automatically redirect using META.
If you want to open the link on another page, the best solution is to use WEBBROWSER.

My solution:

import streamlit as st
def redirect(_url):
link = ‘’
st.markdown(link, unsafe_allow_html=True)

if st.button(“Login”):
redirect(‘http://localhost:8501/Login’)

or direct:

redirect(‘http://localhost:8501/Login’)

import streamlit as st
import webbrowser
login = st.button(‘Login’)
if login:
webbrowser.open(‘http://localhost:8501/Login’)

1 Like

That does not work actually.

This works wonders! I seriously did not know about webbrowser, but man does it come in handy!

import streamlit as st
import webbrowser


def open_support_ticket():
    email_link = "mailto:servicesdesk@evilcorp.com"
    webbrowser.open(email_link)

st.button("Contact us!", on_click=open_support_ticket)
3 Likes

Webbrowser will not work when your app is hosted so be wary. Dont do what I did and learn the hard way. If you are only intending for it to be run on local machines that is fine.