W poprzednim kroku zrobiliśmy całkiem sporo, ale to dopiero początek. Potrzebne nam będą jeszcze inne funkcje, żeby nasza aplikacja zrobiła wszystko co to chcemy, czyli stworzyła dla nas plik HTML z notami wydania.
W tym kroku dodamy funkcję i prosty szablon, który pozwoli nam przerobić słownik na fragment kodu HTML. Będą to wiersze tabeli, które podstawimy w kolejnych krokach do naszego szablonu HTML. Jak pamiętasz, szablon przygotowaliśmy w kroku 3.
Na początek, dodaj taki mały szablon.
rel_notes_generator.py
rel_note_template = Template('''<tr>
<td>$id</td>
<td>$description</td>
</tr>
''')
Szablon ma w sobie dwa elementy zastępcze, $id
i $description
, które
będziemy zamieniać odpowiednio na klucz i wartość ze słownika. Potrójny
cudzysłów ('''
lub """
) służy do tworzenia łańcuchów znaków, które zajmują
więcej niż jedną linijkę. Dla łańcuchów znaków, które nie wykraczają poza jedną
linijkę używa się pojedynczego cudzysłowu ('
lub "
).
Następnie dodaj kolejną funkcję.
rel_notes_generator.py
def generate_release_notes(release_notes):
rel_note_table_rows = ''
for id, description in release_notes.items():
rel_note_table_rows += rel_note_template.substitute(
id=id, description=description)
return rel_note_table_rows
Jej zadaniem będzie przekształcenie słownika we fragment kodu HTML. W poprzednim kroku analizowaliśmy poszczególne części składowe funkcji, więc pewnie ta funkcja nie jest już dla Ciebie wielką niewiadomą. Jednak dla porządku przejdźmy po tym co się tutaj dzieje.
Nasza funkcja o nazwie generate_release_notes
przyjmuje jako parametr słownik
(release_notes
), w którym są pary numer zgłoszenia: opis zmian
.
Na początku, tworzymy zmienną rel_note_table_rows
, której wartość to pusty
tekst (''
). W tej zmiennej zapiszemy nasze wiersze tabeli HTML, które
wygenerujemy za pomocą naszego szablonu rel_note_template
.
Następnie, mówimy Pythonowi, żeby dla każdej pary (for id, description
) w
słowniku (release_notes.items()
):
- Wziął szablon
rel_note_template
i podmienił w nim element zastępczy$id
naid
ze słownika (czyli numer zgłoszenia) i zamienił element zastępczy$description
nadescription
ze słownika. Innymi słowy pobieramy ze słownika numer zgłoszenia i opis zmian i wstawiamy je do szablonu (rel_note_template.substitute(id=id, description=description)
). - Dodał wygenerowany wiersz tabeli HTML do zmiennej, którą stworzyliśmy na
początku (
rel_note_table_rows +=
).
Kiedy pętla przejdzie po wszystkich parach w słowniku, funkcja zwróci nam
zmienną z gotowymi wierszami tabeli (return rel_note_table_rows
). W naszym
testowym środowisku, funkcja zwróci nam taki kod:
<tr>
<td>PROJ-101</td>
<td>
Dodaliśmy nową funkcję, która pozwala na szybkie pobieranie zasobów
sieciowych.
</td>
</tr>
<tr>
<td>PROJ-102</td>
<td>
Naprawiliśmy błąd, który powodował, że aplikacja zawieszała się na kilka
sekund, a następnie okno aplikacji przesuwało się poza ekran przez co
stawało się niewidoczne.
</td>
</tr>
Dla przypomnienia dodam, że tak jak w poprzednim kroku, tylko stworzyliśmy nową funkcję, ale jeszcze jej nie uruchomiliśmy. To zrobimy dopiero później.