Hello, world v4

V tejto chvíli to vyzerá tak, že každá view má obvykle svoj súbor so šablónou. Naozaj to tak aj je.

Doterajší prístup však vedie k nemilému javu. HTML stránky v rámci jednej site obvykle obsahuju kopu spoločného kódu. To by viedlo k duplicite kódu v súboroch so šablónami, čo je zjavne zle; pri zmene spoločného kódu to musíme meniť na viacerých miestach naraz.

Nástroj na riešenie tohto problému je tag  {% extends "..." %} .

Ideme upraviť verziu 3. Chceme ju rozšíriť o pozdrav goodbye.

Obsah adresára templates je takýto (nie txt ale html)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<style type="text/css">
h1 {
        color:red;
        font-style:normal;
}
</style>
<head>
<title>
Hello, world v4
</title>
</head>
<body>
<h1>
{% block pozdrav %}
Toto tu neuvidime, lebo sa to pretazi.
{% endblock %}
</h1>
</body>
</html>

common.txt
{% extends "common.html" %}
{% block pozdrav %}
Hello, {{ who }}.
{% endblock %}


hello.txt
{% extends "common.html" %}
{% block pozdrav %}
Goodbye, {{ who }}.
{% endblock %}


goodbye.txt

Logika veci je zrejmá. Naše views budú používať v skutočnosti šablóny hello.html a goodbye.html. Spoločná časť je vytiahnutá v common.html, ktorú ostatné dve subšablóny dedia cez  {% extends "common.html"%} . common.html má v sebe vyznačený block menom pozdrav, ktorý jej podšablóny preťažujú.

Takto je možné (a žiadúce) vytvoriť celú hierarchiu šablón.

   1 
   2 from django.http import HttpResponse
   3 from django.template import Context,loader
   4 
   5 def hello(request,who):
   6     t=loader.get_template('hello.html')
   7     c=Context({'who':who})
   8     html=t.render(c)
   9     return(HttpResponse(html))
  10 
  11 def goodbye(request,who):
  12     t=loader.get_template('goodbye.html')
  13     c=Context({'who':who})
  14     html=t.render(c)
  15     return(HttpResponse(html))
views.py

Ešte zostáva pridať ďalšiu položku do urlpatterns:

   1 (r'^goodbye/(.*)/$', views.goodbye),

Vyskúšajme:

Celý projekt: hello_v4.tar.gz

Pre poriadok ešte uvediem, že podobné veci je možné dosiahnuť pomocou tagu  {% include "..." %} .

ProgramovanieInternetovychAplikacii/HelloWorldV4 (last edited 2009-02-24 15:30:55 by GejzaJenca)