Django: Templates

Context Variable: Dot Lookup

$ python manage.py shell
  • 1 dict
>>> from django.template import Template, Context
>>> 
>>> person = {'name': 'Sally', 'age': '43'}
>>> t = Template('{{ person.name }} is {{ person.age }} years old.')
>>> c = Context({'person': person})
>>> t.render(c)
'Sally is 43 years old.'
  • 2 attribute
>>> from django.template import Template, Context
>>>
>>> class Person(object):
...     def __init__(self, first_name, last_name):
...         self.first_name, self.last_name = first_name, last_name
>>> t = Template('Hello, {{ person.first_name }} {{ person.last_name }}.')
>>> c = Context({'person': Person('John', 'Smith')})
>>> t.render(c)
'Hello, John Smith.'
  • 3 Method

It’s not possible to pass arguments to the methods. You can only call methods that have no required arguments.

>>> from django.template import Template, Context
>>> t = Template('{{ var }} -- {{ var.upper }} -- {{ var.isdigit }}')
>>> t.render(Context({'var': 'hello'}))
'hello -- HELLO -- False'
>>> t.render(Context({'var': '123'}))
'123 -- 123 -- True'
  • 4 list

Negative list indices are not allowed. For example, the template variable {{ items.-1 }} would cause aTemplateSyntaxError`.

>>> from django.template import Template, Context
>>>
>>> t = Template('Item 2 is {{ items.2 }}.')
>>> c = Context({'items': ['apples', 'bananas', 'carrots']})
>>> t.render(c)
'Item 2 is carrots.'
  • 5 Invalid Variables

Generally, if a variable doesn’t exist, the template system inserts the value of the engine’s string_if_invalid configuration option, which is an empty string by default.

>>> from django.template import Template, Context
>>>
>>> t = Template('Your name is {{ name }}.')
>>> t.render(Context())
'Your name is .'
>>> t.render(Context({'var': 'hello'}))
'Your name is .'
  • Dot lookup
    Dot lookups can be summarized like this: when the template system encounters a dot in a variable name, it tries the following lookups, in this order:
    • Dictionary lookup (e.g., foo["bar"])
    • Attribute lookup (e.g., foo.bar)
    • Method call (e.g., foo.bar())
    • List-index lookup (e.g., foo[2])

Tags

  • 1 if-else
{% if ... %}
    ...
{% elif ... %}
    ...
{% else %}
   ...
{% endif %}

Use of actual parentheses in the if tag is invalid syntax.

  • 2 for
{% for x in y_list %}
    ...
{% empty %}
  ...
{% endfor %}

the for tag supports an optional {% empty %} clause that lets you define what to output if the list is empty.

  • 3 forloop

    • forloop.counter is always set to an integer representing the number of times the loop has been entered. This is one-indexed, so the first time through the loop, forloop.counter will be set to 1.

    • forloop.counter0 is like forloop.counter, except it’s zero-indexed. Its value will be set to 0 the first time through the loop.

    • forloop.revcounter is always set to an integer representing the number of remaining items in the loop. The first time through the loop, forloop.revcounter will be set to the total number of items in the sequence you’re traversing. The last time through the loop, forloop.revcounter will be set to 1.

    • forloop.revcounter0 is like forloop.revcounter, except it’s zero-indexed. The first time through the loop, forloop.revcounter0 will be set to the number of elements in the sequence minus 1. The last time through the loop, it will be set to 0.

    • forloop.first is a Boolean value set to True if this is the first time through the loop.

    • forloop.last is a Boolean value set to True if this is the last time through the loop.

    • forloop.parentloop is a reference to the forloop object for the parent loop, in case of nested loops.

  • 4 comments

{# ...  #}      // one-line

{% comment %}    //multi-line
...
...
{% endcomment %}

filters

A filter argument comes after a colon and is always in double quotes.

{{ name|lower }}

Templates in views

  • 1 settings.py
    set DIRS to [os.path.join(BASE_DIR,'templates')]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            # ...
  • 2 create a \templates directory inside your root \mypro folder.
\mypro
   \mypro
   \templates
   manage.py
  • 3 views.py
from django.template.loader import get_template
from django.http import HttpResponse
import datetime

def current_datetime(request):
    now = datetime.datetime.now()
    t = get_template('current_datetime.html')
    html = t.render({'current_date': now})
    return HttpResponse(html)

or

from django.shortcuts import render
import datetime

def current_datetime(request):
    now = datetime.datetime.now()
    return render(request, 'current_datetime.html', {'current_date': now})
  • 4 current_datetime.html
<html>
    <body>
        It is now {{ current_date }}
    </body>
</html>
  • 5 runserver
current time
  • 6 Template Inheritance

base.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    <h1>My helpful timestamp site</h1>
    {% block content %}{% endblock %}

    {% block footer %}
    <hr>
    <p>Thanks for visiting my site.</p>
    {% endblock %}
</body>
</html>

current_datetime.html

{% extends "base.html" %}
{% block title %}The current time{% endblock %}
{% block content %}
    <p>It is now {{ current_date }}.</p>
{% endblock %}

hours_ahead.html

{% extends "base.html" %}
{% block title %}Future time{% endblock %}
{% block content %}
<p>
    In {{ hour_offset }} hour(s), it will be {{ next_time }}.
</p>
{% endblock %}
current time
hours_ahead

read more

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市丹泉,隨后出現(xiàn)的幾起案子岩四,更是在濱河造成了極大的恐慌即横,老刑警劉巖别厘,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件别惦,死亡現(xiàn)場(chǎng)離奇詭異允趟,居然都是意外死亡屎慢,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門咽块,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)绘面,“玉大人,你說(shuō)我怎么就攤上這事〗伊В” “怎么了晚凿?”我有些...
    開(kāi)封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)塘辅。 經(jīng)常有香客問(wèn)我,道長(zhǎng)皆撩,這世上最難降的妖魔是什么扣墩? 我笑而不...
    開(kāi)封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮扛吞,結(jié)果婚禮上呻惕,老公的妹妹穿的比我還像新娘。我一直安慰自己滥比,他們只是感情好亚脆,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著盲泛,像睡著了一般濒持。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寺滚,一...
    開(kāi)封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天柑营,我揣著相機(jī)與錄音,去河邊找鬼村视。 笑死官套,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蚁孔。 我是一名探鬼主播奶赔,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼杠氢!你這毒婦竟也來(lái)了站刑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鼻百,失蹤者是張志新(化名)和其女友劉穎笛钝,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體愕宋,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡玻靡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了中贝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片囤捻。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖邻寿,靈堂內(nèi)的尸體忽然破棺而出蝎土,到底是詐尸還是另有隱情视哑,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布誊涯,位于F島的核電站挡毅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏暴构。R本人自食惡果不足惜跪呈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望取逾。 院中可真熱鬧耗绿,春花似錦、人聲如沸砾隅。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)晴埂。三九已至究反,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間儒洛,已是汗流浹背奴紧。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晶丘,地道東北人黍氮。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像浅浮,于是被迫代替她去往敵國(guó)和親沫浆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • PLEASE READ THE FOLLOWING APPLE DEVELOPER PROGRAM LICENSE...
    念念不忘的閱讀 13,433評(píng)論 5 6
  • 不知不覺(jué)加入天使團(tuán)已9天了滚秩,9天雖不長(zhǎng)专执,但是我已經(jīng)養(yǎng)成了一個(gè)良好習(xí)慣。每天堅(jiān)持早起+運(yùn)動(dòng)+閱讀的好習(xí)慣郁油。 ...
    半新不舊閱讀 213評(píng)論 0 1
  • 沒(méi)有持續(xù)千年的悲傷桐腌,沒(méi)有持續(xù)千年的愛(ài)情拄显,但可能有持續(xù)千年的悲傷愛(ài)情。 鬼怪以Happy ending 收尾讓我心中...
    流波舞閱讀 642評(píng)論 0 5
  • 臘八臘八承边,凍掉下巴遭殉。這幾天的北京真有點(diǎn)快凍掉下巴的感覺(jué)。不過(guò)孩子們已經(jīng)陸陸續(xù)續(xù)放了寒假博助,不用在冰冷的冬天掙扎著爬出...
    林濤亂翻書閱讀 731評(píng)論 0 0
  • 懂得感恩的人险污,就象一盞明燈,既照亮了別人富岳,也溫暖了自己蛔糯!做人不一定要頂天立地,但一定要心存感恩城瞎!施人溫暖渤闷,收獲陽(yáng)光...
    飛鴿7631閱讀 157評(píng)論 0 0