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:
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 kontextucontext.push()
, ktora sa na konci importnuteho sum-template zahodilacontext.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 managerwith 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:
test_amend_tag_on_imported_content
test_nested_amend_tags_with_operation_tags_before_content