9.4 HTML un Python sasaiste
Stundas uzdevums: Saprast HTML un Python sasaisti - kā Streamlit ģenerē HTML un kā pielāgot izskatu.
70 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~15 min) - ieliec savu HTML Streamlit lapā · 2. uzdevums (~25 min) - uzraksti CSS kartiņu stilu · 3. uzdevums (~20 min) - saliec divu kolonnu izkārtojumu. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.
Pirms sāc: atver savu 9.3 stundas lapa.py. Atceries: HTML Streamlit lapā strādā tikai ar unsafe_allow_html=True.
Teorija: HTML/CSS Streamlit kontekstā
Streamlit aiz kulisēm ģenerē HTML, CSS un JavaScript. Tu vari ielikt savu HTML/CSS, lai padarītu lietotni unikālu.
import streamlit as st
# Pielāgots HTML
st.markdown(
"<h1 style='color: #FFB142;'>Krāsains virsraksts</h1>",
unsafe_allow_html=True
)
# Pielāgots CSS visai lapai
st.markdown("""
<style>
.stButton button {
background-color: #948979;
color: white;
border-radius: 6px;
padding: 10px 20px;
}
</style>
""", unsafe_allow_html=True)
# Kolonnas izkārtojumam
col1, col2, col3 = st.columns(3)
with col1:
st.metric("Spēlētāji", 142)
with col2:
st.metric("Spēles", 1024, delta=12)
with col3:
st.metric("Vidējais", 87, delta=-3)
UZMANĪBA: unsafe_allow_html=True ir bīstams, ja saturs nāk no lietotāja - XSS uzbrukums!
Praktiskie uzdevumi
1. uzdevums -
Ieliec savu HTML Streamlit lapā
Beigās tu redzēsi atšķirību starp tekstu un HTML.
- Pievieno
st.markdown("<h1>Krāsains virsraksts</h1>")bez papildu parametra. - Palaid un pieraksti, ko lapa parādīja.
- Pievieno parametru
unsafe_allow_html=True. - Palaid vēlreiz un salīdzini rezultātu.
- Pievieno virsrakstam stilu
style='color: #FFB142;'. - Pieraksti, kāpēc šis parametrs saucas
unsafe.
Gatavs, kad: bez parametra lapa parāda tagus kā tekstu, ar to - īstu oranžu virsrakstu.
2. uzdevums -
Uzraksti CSS kartiņu stilu
Beigās tavi dati izskatīsies kā kartiņas, nevis kā vienkāršs teksts.
- Pievieno
st.markdownblokā<style>tagu. - Uzraksti tajā klasi
.metric-cardar fona krāsu unpadding. - Pievieno tai
border-radiusunborder-left. - Izveido
divar šo klasi un ieliec tajā vienu skaitli. - Palaid un pārbaudi, vai kartiņai ir apaļi stūri.
- Nomaini
border-leftkrāsu un palaid vēlreiz. - Pieraksti, kāpēc CSS jāpievieno tikai vienu reizi lapā.
Gatavs, kad: ekrānā ir kartiņa ar krāsainu kreiso maliņu un apaļiem stūriem.
3. uzdevums -
Saliec divu kolonnu izkārtojumu
Beigās tava lapa izmantos visu ekrāna platumu.
- Pievieno
col1, col2 = st.columns(2). - Ieliec vienu kartiņu
with col1:blokā. - Ieliec otru kartiņu
with col2:blokā. - Palaid un pārbaudi, vai abas ir blakus.
- Nomaini uz
st.columns([2, 1])un palaid vēlreiz. - Pieraksti, kā mainījās kolonnu platums.
- Sašaurini pārlūka logu un pieraksti, kas notiek ar kolonnām.
Gatavs, kad: abas kartiņas ir blakus, un ar [2, 1] pirmā kolonna ir divreiz platāka.
Papildu uzdevums - Pievieno lapas ikonu un nosaukumu
Ja pamatdarbs ir gatavs, noformē pārlūka cilni.
- Pievieno faila sākumā
st.set_page_config(page_title="Mans projekts", page_icon="🎮"). - Pārliecinies, ka šī rinda ir pirms visām citām
st.komandām. - Palaid un paskaties uz pārlūka cilnes nosaukumu.
- Pārvieto rindu zemāk un pieraksti, kāda kļūda rodas.
- Ieliec to atpakaļ pirmajā vietā.
Gatavs, kad: cilnē redzams tavs nosaukums ar ikonu, un tu zini, ka šī rinda drīkst būt tikai pirmā.
Biežākās kļūdas
- unsafe_allow_html ar lietotāja datiem: XSS risks. Vienmēr
html.escape()ievadīto. - CSS netiek piemērots: Streamlit izolē CSS - lieto specifiskus selektorus.
- Aizmirsts close-tag HTML: Pārlūks parsē kļūdu, lapa salauzta.
Koda piemērs
import streamlit as st
st.markdown("""
<style>
.metric-card {
background: #393E46;
padding: 20px;
border-radius: 8px;
border-left: 5px solid #FFB142;
}
</style>
""", unsafe_allow_html=True)
col1, col2 = st.columns(2)
with col1:
st.markdown(
'<div class="metric-card"><h3>Spēlētāji</h3><div class="metric-value">142</div></div>',
unsafe_allow_html=True
)
with col2:
st.metric("Vidējie punkti", 87, delta=5)
Paralēls metric ar zaļu delta zīmi.