Шаблоны¶
<title>{{ title }}</title>
<div>{{ cats.0.name }}</div>
<!-- вывести текст без замены html символов, т.е. как есть -->
{% autoescape on %}
{{ some_html }}
{% endautoescape %}
<!-- выключить шаблонизацию для учатска -->
{% verbatim %}
{{ some_html }}
{% endverbatim %}
<!-- вывести первое непустое и не нулевое значение -->
{% firstof val1 val2 val3 %}
{% with cat=good.category %}
{{ cat.id }}
{% endwith %}
{# коментарии #}
<script>
var csrftoken = $.cookie('csrftoken');
$.ajaxSetup({
beforeSend: function(xhr, settings){
xhr.setRequestHeader('X-CSRFToken', csrftoken);
}
});
</script>
Циклы¶
<ul>
{% for good in goods %}
<li>{{ good.name }}</li>
{{ forloop.counter }} - номер теущей итерации начиная с 1
{{ forloop.counter0 }} - номер теущей итерации начиная с 0
{{ forloop.revcounter }} - номер теущей итерации с конца, начиная с 1
{{ forloop.revcounter0 }} - номер теущей итерации с конца, начиная с 0
{{ forloop.first }} - булево, первая итерация
{{ forloop.last }} - булево, последняя итерация
{{ forloop.parentloop }} - родительский цикл
{% empty %}
<!-- блок исполнится если список пустой -->
...
{% endfor %}
</ul>
<!-- генератор, который возвращает новое значение при каждом обращении -->
{% cycle 'normal' 'alternate' %}
Условия¶
{% if good.id == 1 %}
...
{% elif good.id == 2%}
...
{% else %}
...
{% endif %}
<!-- работает быстрее чем обычный if -->
{% ifequal good.id 1 %}
...
{% endifequal %}
<!-- работает быстрее чем обычный if -->
{% ifnotequal good.id 1%}
...
{% endifnotequal %}
Фильтры¶
<!-- сложение -->
{{ good.some_attr|add:2 }}
<!-- первый символ в верхний регистр -->
{{ good.some_attr|capfirst }}
<!-- удаляет из строка указанную подстроку -->
{{ good.some_attr|cut:"cut" }}
<!-- дефолтное значение если значение пустое -->
{{ good.some_attr|default:"default" }}
<!-- дефолтное значение если значение None -->
{{ good.some_attr|default_if_none:"0" }}
<!-- проверяет, делится ли число на указанное без остатка -->
{{ good.some_attr|devisibleby:"0" }}
<!-- заменяте недопустимые символы html -->
{{ good.some_attr|escape }}
<!-- преобразует значение для javascript сценариев -->
{{ good.some_attr|escapejs }}
<!-- первый элемент списка -->
{{ good.some_attr|first }}
Числа
<!-- округление -->
{{ good.some_attr|floatformat:"0" }}
<!-- 35 -->
{{ good.some_attr|floatformat:"3" }}
<!-- 35 -->
{{ good.some_attr|floatformat:"-3" }}
<!-- 35.000 -->
Дата и время
<!-- форматирует дату по формату -->
{{ good.some_attr|date:"j.d.y" }}
{{ good.some_attr|date:"date_format" }}
{% if some_date|date:"L" %}
високосный год
{% endif %}
<!-- форматирует время по формату -->
{{ good.some_attr|time:"time_format" }}
{{ good.some_attr|time:"G:i" }}
<!-- последний элемент списка -->
{{ good.some_attr|last }}
<!-- размер списка -->
{{ good.some_attr|length }}
<!-- помещает занчение в <p> и заменяет переводы каретки на <br> -->
{{ good.some_attr|linebreaks }}
<!-- заменяем перевод каретки на <br> -->
{{ good.some_attr|linebreaksbr }}
<!-- преобразует значение в нижний регистр -->
{{ good.some_attr|lower }}
<!-- возвращает случайное значение из указанных -->
{{ good.some_attr|random }}
<!-- отключает преобразование недопустимых символов html -->
{{ good.some_attr|safe }}
<!-- удаляет все html теги -->
{{ good.some_attr|striptags }}
<!-- срез списка -->
{{ good.some_attr|slice:"1:5" }}
<!-- преобразует все первые буквы слов в значений в верхний регистр -->
{{ good.some_attr|title }}
<!-- обрезает строку до указанных количеств символов -->
{{ good.some_attr|truncatechars:"100" }}
<!-- обрезает строку до указанных количеств слов -->
{{ good.some_attr|truncatewords:"10" }}
<!-- обрезает строку до указанных количеств слов с учетом html -->
{{ good.some_attr|truncatewords_html:"10" }}
<!-- преобразует в верхний регистр -->
{{ good.some_attr|upper }}
<!-- -->
{{ good.some_attr|urlencode }}
<!-- количество слов в знгачении -->
{{ good.some_attr|wordcount }}
<!-- если True - Yes, False - No, None - None -->
{{ good.some_attr|yesno:"Yes,No,None" }}
<!-- примение группы фильтров для элементов -->
{% filter linebreaksbr|striptags %}
{{ good.some_attr1 }}
{{ good.some_attr2 }}
{% endfilter %}
Наследование и блоки шаблонов¶
{% extends "base.html" %}
{% include "_navbar.html" with active_link = "link2" %}
{% block content %}
{% endblock %}
Статика¶
{% load staticfiles %}
<link href="{% static "app.css" %}" rel="stylesheet">
Свои теги и фильтры¶
# templatetags/blog_tags.py
from django import template
from django.utils.safestring import mark_safe
import markdown
register = template.Library()
@register.simple_tag
def total_posts():
return 5
@register.filter(name='markdown')
def markdown_format(text):
return mark_safe(markdown.markdown(text))
{% load blog_tags %}
{% total_posts %}
{{ post.text|markdown }}
Локализация¶
{% load i18n %}
{% trans "Text" %}
{% trans "Text" as text%}
<h1>{{ text }}</h1>
{% blocktrans %}
Hello {{ name }}!
{% endblocktrans %}
{% blocktrans with name=user.name|capfirst %}
Hello {{ name }}!
{% endblocktrans %}
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
<div class="languages">
<p>{% trans "Language" %}:</p>
<ul class="languages">
{% for language in languages %}
<li>
<a href="/{{ language.code }}/"
{% if language.code == LANGUAGE_CODE %}
class="selected"
{% endif %}>
{{ language.name_local }}
</a>
</li>
{% endfor %}
</ul>
</div>
Кеширование¶
{% load_cache %}
{% cache 300 fragment_name %}
{% endcache %}