SlideShare una empresa de Scribd logo
1 de 29
Descargar para leer sin conexión
Django Templates
@starwilly
What We Have Known
{{ <post.title> }}
{% if post.photo %}
<div class="thumbnail">
<img src="{{ post.photo }}" alt="">
</div>
{% else %}
<div class="thumbnail thumbnail-default"></div>
{% endif %}
{% for post in post_list %}
…
{% endfor %}
{{ post.created_at|date:"Y / m / d" }}
Variable
Tag <a href="{% url 'post_detail' pk=post.pk %}">
Filter
Template Inheritance
home.html post.html
Template Inheritance
home.html
post.html
base.html
home.html
post.html
<!-- base.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>A Django Girl's Adventure</title>
<link href=“//…/assets/css/style.css” rel="stylesheet">
</head>
<body>
<div class="header">
<h1 class="site-title text-center">
<a href="/">A Django Girl’s Adventure</a>
</h1>
</div>
<div class=“container">
{% block content %} {% endblock content %}
</div>
</body>
</html>
Extends a template
<!-- home.html -->
{% extends "base.html" %}
{% block content %}
{% for post in post_list %}
<div class="post-wrapper">
<div class="post">
…
</div>
</div>
{% endfor %}
{% endblock content %}
Extends a template
{% extends "base.html" %}
{% block content %}
{% for post in post_list %}
<div class="post-wrapper">
<div class="post">
…
</div>
</div>
{% endfor %}
{% endblock content %}
{% extends %} must be the first template tag
Fill the Block
{% extends "base.html" %}
{% block content %}
{% for post in post_list %}
<div class="post-wrapper">
<div class="post">
…
</div>
</div>
{% endfor %}
{% endblock content %}
base.html
Fill content to the block you defined
<!-- base.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>A Django Girl's Adventure</title>
<link href=“//…/assets/css/style.css” rel="stylesheet">
</head>
<body>
<div class=“header">
<h1 class="site-title text-center">
<a href="/">A Django Girl’s Adventure</a>
</h1>
<ul class="nav navbar-nav">
<li><a href="#">About Me</a></li>
<li><a href="#">Favorite Trips</a></li>
<li><a href="#">Albums</a></li>
...
<li><a href="#">Contact Me</a></li>
</ul>
</div>
<div class=“container">
{% block content %} {% endblock content %}
</div>
</body>
</html>
Include
<!-- base.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>A Django Girl's Adventure</title>
<link href=“//…/assets/css/style.css” rel="stylesheet">
</head>
<body>
<div class=“header">
<h1 class="site-title text-center">
<a href="/">A Django Girl’s Adventure</a>
</h1>
<ul class="nav navbar-nav">
<li><a href="#">About Me</a></li>
<li><a href="#">Favorite Trips</a></li>
<li><a href="#">Albums</a></li>
...
<li><a href="#">Contact Me</a></li>
</ul>
</div>
<div class=“container">
{% block content %} {% endblock content %}
</div>
</body>
</html>
Extract as Another Template
<!-- base.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>A Django Girl's Adventure</title>
<link href=“//…/assets/css/style.css” rel="stylesheet">
</head>
<body>
{% include ‘_header.html’ %}
<div class=“container">
{% block content %} {% endblock content %}
</div>
</body>
</html>
Include Template
Example: base.html
<!DOCTYPE html>
{% load static %}
<html>
<head>
<link rel="stylesheet" href="main.css" />
{% block extra_css %}{% endblock extra_css %}
<title>
{% block title_tag %}
{% block title %} Welcome {% endblock title %} | A Django Girl's Adventure
{% endblock title_tag %}
</title>
</head>
<body>
{% include "_header.html" %}
<div class="container">
{% block content %} {% endblock content %}
</div>
<script src="{% static 'js/vendors/jquery.js' %}"></script>
<script src="{% static 'js/vendors/bootstrap.js' %}"></script>
{% block extra_js %}{% endblock extra_js %}
</body>
</html>
<!-- home.html -->
{% block title %}Home{% endblock title %}
<!-- post.html -->
{% block title %}{{ post.title }}{% endblock title %}
<title>
{% block title_tag %}
{% block title %} Welcome {% endblock title %} | A Django Girl's Adventure
{% endblock title_tag %}
</title>
<!-- post.html -->
{% block title_tag %}{{ post.title }}{% endblock title_tag %}
Home | A Django Girl's Adventure
| A Django Girl's Adventure
block.super
| Welcome | A Django Girl's Adventure
<!-- post.html -->
{% block title %}{{ post.title }} | {{ block.super }}{% endblock title %}
<title>
{% block title_tag %}
{% block title %} Welcome {% endblock title %} | A Django Girl's Adventure
{% endblock title_tag %}
</title>
Use {{ block.super }} to include parent’s content
Common Conventions
• Prefer underscore over dash in template name, block name
• Included name of the block in endblock tag

• Template called by other template are prefixed with `_`
{% block content %} {% endblock content %}
{% include ‘_header.html’ %}
{% block title_tag %}
2-Tier Template Architecture
templates/
base.html
home.html # extends base.html
trips/
trips_list.html # extends base.html
trips_detail.html # extends base.html
Best for websites with a consistent overall layout
from app to app
3-Tier Template Architecture
templates/
base.html
trips/
base_trips.html # extends base.html
trips_list.html # extends base_trips.html
trips_detail.html # extends base_trips.html
album/
base_album.html # extends base.html
album_list.html # extends base_album.html
album_detail.html # extends base_album.html
Best for websites where each sections requires a
distinctive layout
Flat is Better Than Nested
Zen of Python
Comment
Comment in Django Template
{% comment %}
<div class="sidebar">
sidebar content is not ready
</div>
{% endcomment %}
Multi-line Comment
{# single line comment #}
Single Line Comment
<!-- HTML Comment -->
Filters
Filters
{{ post.title | upper }}
{{ post.title | lower }}
{{ post.title | title }}
post.title = “a wonderFul tRip”
A WONDERFUL TRIP
a wonderful trip
A Wonderful Trip
Filters
I have {{ post_list.count }}
post{{ post_list.count |pluralize}}
post_list.count = 1
I have 2 postspost_list.count = 2
I have 1 post
Filters
{{ post.title|truncatewords:2 }}
{{ value|truncatechars:15 }}
django.contrib.humanize
1. Add 'django.contrib.humanize' to your INSTALLED_APPS settings
2. Use {% load humanize %} in a template
<!-- post.html -->
{% extends "base.html" %}
{% load humanize %}
{% block title %}{{ post.title }}{% endblock title %}
{% block content %}
<div class="post-heading">
<h1 class="title"><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title | title }}</a>
</h1>
<div class="date">{{ post.created_at|naturaltime }}</div>
</div>
…
{{ value|naturaltime }}
Philosophy
Express Presentation
Not Program Logic
Summary
• Template Inheritance:
• {% block %} {% end block %}
• {% extends %}
• {{ block.super }}
• Organize: {% include %}
• Comment: {# comment #}, {% comment %}{% endcomment %
• Filters
• upper , lower, title, 

pluralize, truncatewords, truncatechars
• django.contrib.humanize: naturaltime
Thank you

Más contenido relacionado

La actualidad más candente

JavaScript: Variables and Functions
JavaScript: Variables and FunctionsJavaScript: Variables and Functions
JavaScript: Variables and Functions
Jussi Pohjolainen
 
Javascript variables and datatypes
Javascript variables and datatypesJavascript variables and datatypes
Javascript variables and datatypes
Varun C M
 
A Basic Django Introduction
A Basic Django IntroductionA Basic Django Introduction
A Basic Django Introduction
Ganga Ram
 

La actualidad más candente (20)

JavaScript
JavaScriptJavaScript
JavaScript
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial
 
JavaScript - Chapter 12 - Document Object Model
  JavaScript - Chapter 12 - Document Object Model  JavaScript - Chapter 12 - Document Object Model
JavaScript - Chapter 12 - Document Object Model
 
Django Models
Django ModelsDjango Models
Django Models
 
Python/Flask Presentation
Python/Flask PresentationPython/Flask Presentation
Python/Flask Presentation
 
Javascript 101
Javascript 101Javascript 101
Javascript 101
 
Express js
Express jsExpress js
Express js
 
Introduction to JavaScript
Introduction to JavaScriptIntroduction to JavaScript
Introduction to JavaScript
 
JavaScript - Chapter 11 - Events
 JavaScript - Chapter 11 - Events  JavaScript - Chapter 11 - Events
JavaScript - Chapter 11 - Events
 
Lab #2: Introduction to Javascript
Lab #2: Introduction to JavascriptLab #2: Introduction to Javascript
Lab #2: Introduction to Javascript
 
JSON: The Basics
JSON: The BasicsJSON: The Basics
JSON: The Basics
 
JavaScript Programming
JavaScript ProgrammingJavaScript Programming
JavaScript Programming
 
JavaScript: Variables and Functions
JavaScript: Variables and FunctionsJavaScript: Variables and Functions
JavaScript: Variables and Functions
 
Javascript variables and datatypes
Javascript variables and datatypesJavascript variables and datatypes
Javascript variables and datatypes
 
Django Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python DevelopersDjango Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python Developers
 
Javascript essentials
Javascript essentialsJavascript essentials
Javascript essentials
 
A Basic Django Introduction
A Basic Django IntroductionA Basic Django Introduction
A Basic Django Introduction
 
Javascript arrays
Javascript arraysJavascript arrays
Javascript arrays
 
Rest in flask
Rest in flaskRest in flask
Rest in flask
 
Introduction to Javascript
Introduction to JavascriptIntroduction to Javascript
Introduction to Javascript
 

Similar a Django Templates

Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)
Joao Lucas Santana
 
Private slideshow
Private slideshowPrivate slideshow
Private slideshow
sblackman
 
El Tiempo Nos Ensea 214392
El Tiempo Nos Ensea 214392El Tiempo Nos Ensea 214392
El Tiempo Nos Ensea 214392
guestc65f09
 
Los Estados De La Materia
Los Estados De La MateriaLos Estados De La Materia
Los Estados De La Materia
Mayritalinda
 

Similar a Django Templates (20)

引き出しとしてのDjango - SoozyCon7
引き出しとしてのDjango - SoozyCon7引き出しとしてのDjango - SoozyCon7
引き出しとしてのDjango - SoozyCon7
 
Frfrfrf
FrfrfrfFrfrfrf
Frfrfrf
 
Templates81 special document
Templates81 special documentTemplates81 special document
Templates81 special document
 
Templates81 special document
Templates81 special documentTemplates81 special document
Templates81 special document
 
DRYing Up Rails Views and Controllers
DRYing Up Rails Views and ControllersDRYing Up Rails Views and Controllers
DRYing Up Rails Views and Controllers
 
Django Rest Framework and React and Redux, Oh My!
Django Rest Framework and React and Redux, Oh My!Django Rest Framework and React and Redux, Oh My!
Django Rest Framework and React and Redux, Oh My!
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2
 
Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2
 
`From Prototype to Drupal` by Andrew Ivasiv
`From Prototype to Drupal` by Andrew Ivasiv`From Prototype to Drupal` by Andrew Ivasiv
`From Prototype to Drupal` by Andrew Ivasiv
 
Django workshop : let's make a blog
Django workshop : let's make a blogDjango workshop : let's make a blog
Django workshop : let's make a blog
 
Private slideshow
Private slideshowPrivate slideshow
Private slideshow
 
El Tiempo Nos Ensea 214392
El Tiempo Nos Ensea 214392El Tiempo Nos Ensea 214392
El Tiempo Nos Ensea 214392
 
Los Estados De La Materia
Los Estados De La MateriaLos Estados De La Materia
Los Estados De La Materia
 
Articulo java web
Articulo java webArticulo java web
Articulo java web
 
smoke1272528461
smoke1272528461smoke1272528461
smoke1272528461
 
Intro to Jinja2 Templates - San Francisco Flask Meetup
Intro to Jinja2 Templates - San Francisco Flask MeetupIntro to Jinja2 Templates - San Francisco Flask Meetup
Intro to Jinja2 Templates - San Francisco Flask Meetup
 
Jinja2 Templates - San Francisco Flask Meetup
Jinja2 Templates - San Francisco Flask MeetupJinja2 Templates - San Francisco Flask Meetup
Jinja2 Templates - San Francisco Flask Meetup
 

Último

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (20)

Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 

Django Templates

  • 2. What We Have Known {{ <post.title> }} {% if post.photo %} <div class="thumbnail"> <img src="{{ post.photo }}" alt=""> </div> {% else %} <div class="thumbnail thumbnail-default"></div> {% endif %} {% for post in post_list %} … {% endfor %} {{ post.created_at|date:"Y / m / d" }} Variable Tag <a href="{% url 'post_detail' pk=post.pk %}"> Filter
  • 6. <!-- base.html --> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>A Django Girl's Adventure</title> <link href=“//…/assets/css/style.css” rel="stylesheet"> </head> <body> <div class="header"> <h1 class="site-title text-center"> <a href="/">A Django Girl’s Adventure</a> </h1> </div> <div class=“container"> {% block content %} {% endblock content %} </div> </body> </html>
  • 7. Extends a template <!-- home.html --> {% extends "base.html" %} {% block content %} {% for post in post_list %} <div class="post-wrapper"> <div class="post"> … </div> </div> {% endfor %} {% endblock content %}
  • 8. Extends a template {% extends "base.html" %} {% block content %} {% for post in post_list %} <div class="post-wrapper"> <div class="post"> … </div> </div> {% endfor %} {% endblock content %} {% extends %} must be the first template tag
  • 9. Fill the Block {% extends "base.html" %} {% block content %} {% for post in post_list %} <div class="post-wrapper"> <div class="post"> … </div> </div> {% endfor %} {% endblock content %} base.html Fill content to the block you defined
  • 10. <!-- base.html --> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>A Django Girl's Adventure</title> <link href=“//…/assets/css/style.css” rel="stylesheet"> </head> <body> <div class=“header"> <h1 class="site-title text-center"> <a href="/">A Django Girl’s Adventure</a> </h1> <ul class="nav navbar-nav"> <li><a href="#">About Me</a></li> <li><a href="#">Favorite Trips</a></li> <li><a href="#">Albums</a></li> ... <li><a href="#">Contact Me</a></li> </ul> </div> <div class=“container"> {% block content %} {% endblock content %} </div> </body> </html> Include
  • 11. <!-- base.html --> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>A Django Girl's Adventure</title> <link href=“//…/assets/css/style.css” rel="stylesheet"> </head> <body> <div class=“header"> <h1 class="site-title text-center"> <a href="/">A Django Girl’s Adventure</a> </h1> <ul class="nav navbar-nav"> <li><a href="#">About Me</a></li> <li><a href="#">Favorite Trips</a></li> <li><a href="#">Albums</a></li> ... <li><a href="#">Contact Me</a></li> </ul> </div> <div class=“container"> {% block content %} {% endblock content %} </div> </body> </html> Extract as Another Template
  • 12. <!-- base.html --> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>A Django Girl's Adventure</title> <link href=“//…/assets/css/style.css” rel="stylesheet"> </head> <body> {% include ‘_header.html’ %} <div class=“container"> {% block content %} {% endblock content %} </div> </body> </html> Include Template
  • 13. Example: base.html <!DOCTYPE html> {% load static %} <html> <head> <link rel="stylesheet" href="main.css" /> {% block extra_css %}{% endblock extra_css %} <title> {% block title_tag %} {% block title %} Welcome {% endblock title %} | A Django Girl's Adventure {% endblock title_tag %} </title> </head> <body> {% include "_header.html" %} <div class="container"> {% block content %} {% endblock content %} </div> <script src="{% static 'js/vendors/jquery.js' %}"></script> <script src="{% static 'js/vendors/bootstrap.js' %}"></script> {% block extra_js %}{% endblock extra_js %} </body> </html>
  • 14. <!-- home.html --> {% block title %}Home{% endblock title %} <!-- post.html --> {% block title %}{{ post.title }}{% endblock title %} <title> {% block title_tag %} {% block title %} Welcome {% endblock title %} | A Django Girl's Adventure {% endblock title_tag %} </title> <!-- post.html --> {% block title_tag %}{{ post.title }}{% endblock title_tag %} Home | A Django Girl's Adventure | A Django Girl's Adventure
  • 15. block.super | Welcome | A Django Girl's Adventure <!-- post.html --> {% block title %}{{ post.title }} | {{ block.super }}{% endblock title %} <title> {% block title_tag %} {% block title %} Welcome {% endblock title %} | A Django Girl's Adventure {% endblock title_tag %} </title> Use {{ block.super }} to include parent’s content
  • 16. Common Conventions • Prefer underscore over dash in template name, block name • Included name of the block in endblock tag
 • Template called by other template are prefixed with `_` {% block content %} {% endblock content %} {% include ‘_header.html’ %} {% block title_tag %}
  • 17. 2-Tier Template Architecture templates/ base.html home.html # extends base.html trips/ trips_list.html # extends base.html trips_detail.html # extends base.html Best for websites with a consistent overall layout from app to app
  • 18. 3-Tier Template Architecture templates/ base.html trips/ base_trips.html # extends base.html trips_list.html # extends base_trips.html trips_detail.html # extends base_trips.html album/ base_album.html # extends base.html album_list.html # extends base_album.html album_detail.html # extends base_album.html Best for websites where each sections requires a distinctive layout
  • 19. Flat is Better Than Nested Zen of Python
  • 21. Comment in Django Template {% comment %} <div class="sidebar"> sidebar content is not ready </div> {% endcomment %} Multi-line Comment {# single line comment #} Single Line Comment <!-- HTML Comment -->
  • 23. Filters {{ post.title | upper }} {{ post.title | lower }} {{ post.title | title }} post.title = “a wonderFul tRip” A WONDERFUL TRIP a wonderful trip A Wonderful Trip
  • 24. Filters I have {{ post_list.count }} post{{ post_list.count |pluralize}} post_list.count = 1 I have 2 postspost_list.count = 2 I have 1 post
  • 25. Filters {{ post.title|truncatewords:2 }} {{ value|truncatechars:15 }}
  • 26. django.contrib.humanize 1. Add 'django.contrib.humanize' to your INSTALLED_APPS settings 2. Use {% load humanize %} in a template <!-- post.html --> {% extends "base.html" %} {% load humanize %} {% block title %}{{ post.title }}{% endblock title %} {% block content %} <div class="post-heading"> <h1 class="title"><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title | title }}</a> </h1> <div class="date">{{ post.created_at|naturaltime }}</div> </div> … {{ value|naturaltime }}
  • 28. Summary • Template Inheritance: • {% block %} {% end block %} • {% extends %} • {{ block.super }} • Organize: {% include %} • Comment: {# comment #}, {% comment %}{% endcomment % • Filters • upper , lower, title, 
 pluralize, truncatewords, truncatechars • django.contrib.humanize: naturaltime