Hlavní navigace

Šablony stránek pro Zope: tal:replace

Miloš Průdek

V minulém dílu představenou šablonu pro automatický seznam obrázků dnes trochu přepíšeme, aby poskytovala lepší výsledky, a přitom si v praxi ukážeme další značku jazyka ZPT - tal:replace. Také se znovu podíváme na získávání užitečných informací pro aplikace typu cesta.

V minulém pokračování jsme si představili šablonu obsahující automatický seznam obrázků. Pro přehlednost bude nejlepší, když starý zdrojový kód ze šablony index_html smažete a do šablony dáte jen aktuální příklad jako na obrázku níže.



Když tuto šablonu vyzkoušíte, zjistíte, že funguje dobře a zobrazí seznam obrázků v dané složce. Má to ale dva nedostatky:

  1. Takto sestavená značka <img src> neobsahuje atributy height, width, alt a title. Přitom Zope tyto atributy eviduje pro každý obrázek a umí je vložit do značky <img src>, jen se na to musí jinak.
  2. Když použijete adresu http://localhos­t/test/, obrázky se objeví, ale pokud poslední lomítko vynecháte, obrázky se neobjeví.

Použijeme tedy systémovější řešení. Smažte původní obsah šablony index_html a zadejte následující text:

<hr>
<div tal:define="obrazky python:here.objectValues('Image')">
    <h2>Obrázky, metoda B</h2>

    <ul tal:condition="obrazky">
      <li tal:repeat="obr obrazky">
        <img src="Obrázek" tal:replace="structure obr">

      </li>
    </ul>
    <p tal:condition="not:obrazky"><b>Zde nejsou
    žádné obrázky.</b></p>

</div>

Když jako testovací obrázky použijete například ikony 32×32 ze sady Noia Warm 0.95 pro KDE, vydá tato šablona po spuštění následující výsledek:



Kromě nadpisu ve značce <h2> se změnil vlastně jen řádek se značkou <img src>. Zatímco dříve zde byla značka tal:attributes a modifikovali jsme jen atributy značky <img src>, teď je situace odlišná. Používáme příkaz tal:replace, který původní značku <img src> celou smaže a nahradí ji výrazem structure obr. Argumentem je objekt

obr, který obsahuje celý obrázek.

Všimněte si klíčového slova structure. Toto slovo je nezbytné, protože jinak by Zope automaticky citovalo vložený kód HTML; v prohlížeči by se pak místo obrázku objevila samotná kompletní značka <img src>. Zkuste na chvilku odstranit klíčové slovo structure a uvidíte, že nekecám :-).

Role klíčového slova structure je následující: Zope automaticky cituje všechny značky HTML, vkládané pomocí příkazů tal:replace a tal:content. Toto automatické citování je naprosto klíčová vlastnost. Zabraňuje totiž tomu, aby data vkládaná programově pomocí šablon rozrušila strukturu stránky definovanou v dané šabloně. Tím se právě potvrzuje a zachovává základní smysl šablon: transparentní možnost úprav pro webdesignera bez ohledu na to, co dělá programátor. Když programátor explicitně vloží klíčové slovostructure, je to pro něj signál, že přebírá odpovědnost za případné rozhození layoutu.

Typ cesta: další příklady

Jako první typ syntaxe TALES jsme v minulých dílech tohoto seriálu článků použili typ cesta (path), a to konkrétně cestu template/title. Také jsme viděli, že se můžeme podívat do objektů aktuální složky díky cestě here/…, a konkrétně jsme se dívali na objekt here/barva, přičemž barva byl dokument DTML ve složce /test/t1/t11.

Když se budeme vyjadřovat lidským, normálním jazykem, řekli bychom, že barva je vlastnost dané složky. Proč tedy vkládat nějaký DTML dokument, který stejně obsahuje jen jeden řetězec? Šlo by to udělat logičtějším způsobem, bez vkládání dalších dokumentů? Zope je dosti objektově orientované a každý objekt má záložku Properties, která obsahuje různé vlastnosti objektu. Přesvědčte se sami, že kupříkladu obrázky obsahují vlastnosti title, height, width a content_type. A každá složka má ve své záložce Properties vlastnost title.

Nemusíte se přitom omezovat na zabudované vlastnosti. Můžete přidávat další, uživatelské vlastnosti. Ukažme si, jak využít vlastnosti na skutečném příkladu.

Zkuste smazat DTML dokument barva ze složky /test/t1/t11. Pak klepněte na záložku Properties této složky a vložte novou vlastnost, jejíž název (Name) bude barva a hodnota například magenta. Když zobrazíte adresu http://localhos­t:8080/test/t1/t11/, bude pozadí stránky fialové.

Přitom šablona index_html nebyla změněna!

Zope totiž metodu získávání aplikuje postupně: nejprve se dívá do vlastností objektů (jako je složka, obrázek nebo dokument) a až potom nahlíží do vložených objektů. Technologii získávání jsem popsal v minulém pokračování. Budeme ji používat docela často, protože je to užitečná technologie.

Typ cesta je zkrátka snadný a příjemný způsob, jak přijít k penězům… totiž chci říct k informacím. V dalším pokračování našeho seriálu si představíme některé možnosti typu cesta v reálné situaci.

Našli jste v článku chybu?
Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Vitalia.cz: Cena stejného léku se liší i o tisíce

Cena stejného léku se liší i o tisíce

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

120na80.cz: 5 nejčastějších mýtů o kondomech

5 nejčastějších mýtů o kondomech

Podnikatel.cz: Snížení DPH na 15 % se netýká všech

Snížení DPH na 15 % se netýká všech

Vitalia.cz: 4 příčiny zápachu z úst a jak s ním zatočit

4 příčiny zápachu z úst a jak s ním zatočit

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?