martinmacko47 / chcemvediet

FOIA requests for the lazy
4 stars 4 forks source link

#334 Fix amend template tag context #425

Closed martinmacko47 closed 2 years ago

martinmacko47 commented 2 years ago

Oprava {% amend %} template tagu, aby spravne pracoval s svojou context premennou _amend.

Doteraz sa _amend premenna do kontextu vkladala az pri prvom pouziti tagov ako {% prepend %} a podobne, ktore si premennu _amend v kontexte vytvorili sami. To vsak sposobovalo problem, ze ak sa {% prepend %} nachadzalo v importnutom sub-template, tak django pri importovani sub-templatu vytvorilo novu vrstvu kontextu context.push(), ktora sa na konci importnuteho sum-template zahodila context.pop(), cim sa stratila premenna _amend, ktoru do kontextu vlozil {% prepend %}.

Bug bol zakerny v tom, ze sa prejavoval iba ak {% prepend %} bolo pouzite v sub-template, a to aj iba vtedy, ak v hlavnom template nebol predtym pouzity nejaky iny tag, ktory by premmenu _amend do contextu uz pridal. Pretoze, ak premenna _amend v kontexte uz pri importe sub-template bola, vytvorenie novej vrstvy kontextu ju zachovalo a tak tag {% prepend %} v sub-template mal nadalej pristup k _amend z hlavneho templatu, do ktoreho zapisal svoje data.

Bug som fixol tak, ze premenna _amend sa do kontextu prida hned na zaciatku pri otvarajucom tagu {% amend %}. Takze vsetky taky ako {% prepend %} vo vnutri {% amend %} budu mat premennu _amend uz k dispozicii v kontexte, bez ohladu na to, ci sa nachadzaju v hlavnom template, alebo v sub-template.

Navyse na zaciatku pri otvarajucom tagu {% amend %} okrem pridania _amend do kontextu, vyrobim v kontexte novu vrstvu, ktoru na konci, za {% endamend %} dropnem (kontext manager with context.push ju dropne automaticky). Takze by mali fungovat aj vnorene {% amend %} tagy. Pri vnorenych {% amend %} tagov kazdy {% amend %} tag aplikuje tie prikazy, ktore su v jeho vrstve kontextu.

Pls poriadne pretestuj, ci to funguje, alebo ci sa nieco nepokazilo niekde.

Edit: Pridal som dva testy, ktore na aktualnom masteri failuju a na tomto PR vyzeraju, ze uz funguju. Pls pozri ich a pretestuj: