Система шаблонов Джанго

задняя часть Python Django

Это 10-й день моего участия в ноябрьском испытании обновлений. Узнайте подробности события:Вызов последнего обновления 2021 г.

Базовый синтаксис шаблона Django

Система шаблонов Django в основном включает в себя переменные шаблона, фильтры, теги шаблона и т. д.

  • Переменные шаблона имеют вид {{ name}}, где {{}} — имя переменной.

  • Фильтры в основном имеют дело с переменными шаблона, такими как изменение режима отображения.

  • Тег шаблона имеет вид {% name%}, а внутри {%%} находится логически связанное имя

файл шаблона

Файлы шаблонов в Django — это HTML-файлы.

В обычных обстоятельствах мы создадим папку с именем templates в корневом каталоге проекта (то есть в каталоге, где находится файл manage.py) для хранения наших файлов шаблонов.

Установите путь к файлу шаблона в блоке кода TEMPLATES файла settings.py, а DIRS — это место для установки пути к файлу шаблона.

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # 定义一个目录列表,模板引擎按顺序在其中查找模板文件
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        # APPS_DIRS为True就查找,False就不查找
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

переменная шаблона

Формат переменных шаблона: {{ name }}, где name представляет имя переменной, и с обеих сторон имени должен быть пробел. Имя переменной может состоять из букв, цифр и знаков подчеркивания и не может содержать пробелы или пунктуация.

Переменные шаблона встроены в файлы HTML, и когда механизм шаблонов Django обнаруживает переменную шаблона, он заменяет ее фактическим значением или содержимым, которое представляет переменная.

В переменной шаблона есть форма добавления точки после имени переменной и добавления строки, Механизм шаблонов Django будет анализировать ее в соответствии с различными условиями переменной. Если это переменная словаря, значение ключа запрашивается в форме словаря; если это переменная объекта класса, она запрашивается по свойству или методу; если это переменная списка, она запрашивается по номеру индекса.

пример:

Посмотреть

def test(request):
    a='测试'
    b={'n':'测试字典'}
    return render(request,'test.html',{'a':a,'b':b})

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>{{ a }}</h1>
<h1>{{ b.n }}</h1>

</body>
</html>

image-20211101141250825

Шаблон примечания

Комментарии также можно использовать на языках шаблонов, например {# ××× #}

单行注释形式如下。
{# 这里写注释 #}
多行注释要使用注释标签。
{% comment %}
  ........
{% endcomment %}

фильтр

Повторная обработка переменных шаблона с помощью фильтров для изменения формы или содержимого переменных шаблона.

{{ name|filter_name:参数 }}

Справа от вертикальной черты «|» находится имя фильтра.

Фильтры могут передавать параметры, имя фильтра и параметры разделяются ":"

В формате фильтра переменные перед вертикальной чертой «|» и параметры после «:» будут переданы фильтру как параметры для обработки.

Встроенный фильтр

Общие фильтры

  • Фильтр по умолчанию, формат {{ name|default:"значение по умолчанию"}}, если значение переменной шаблона пусто или False, отображается значение по умолчанию.

  • Длина фильтра в формате {{ name|length }} отображает длину переменной шаблона.

  • Фильтр усеченных символов, формат {{ name|truncatechars:6 }} подходит для случая, когда переменная шаблона представляет собой строку, отображает указанное количество символов и заканчивается многоточием "...", ". .." считается как 3 символа. Например, когда входящий параметр равен 6 символам, из строки перехватываются 3 символа, за которыми следует "...".

  • Фильтрует верхний и нижний регистры, {{ name |upper }} преобразует строку во все прописные буквы, {{ name|lower }} преобразует строку во все строчные буквы.

  • Срез фильтра в формате {{ name|slice:":2"}} используется, когда переменная шаблона является списком или строкой, и отображает его часть, то есть срез, с тем же синтаксисом. как фрагмент Python.

  • Дата фильтра в формате {{ name|date:"Г-м-д H:i:s"}} используется, когда переменная шаблона является датой или временем, обеспечивая форматированный вывод.

  • Фильтр безопасен, формат {{ name|safe }}. В целях безопасности шаблоны Django автоматически избегают (преобразовывают в обычные текстовые строки) синтаксические теги, такие как HTML-теги и коды Java Script, а безопасный фильтр закрывается. Функция автоматического выхода

пример:

Посмотреть

def test(request):
    a='测试'
    b='<h1>123<h1>'
    c='abcABC'
    time=datetime.datetime.now()
    return render(request,'test.html',{'a':a,'b':b,'c':c,'time':time})

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<H1>{{ c|length }}</H1>
<H1>{{ c|truncatechars:2 }}</H1>
<H1>{{ c|upper }}</H1>
<H1>{{ c|lower }}</H1>
<H1>{{ c|slice:"2:5" }}</H1>
<H1>{{ c|date:"Y-m-d H:i:s" }}</H1>
<H1>{{ b }}</H1>
<H1>{{ b|safe}}</H1>


</body>
</html>

image-20211101153942211

Теги шаблона

Встроенные теги шаблона

тег шаблона, если

Для справки, хотя он и помещен в файл HTML, его синтаксис очень похож на синтаксис кода Python. Когда {% if %} истинно, система шаблонов отображает содержимое между {% if %} и {% endif %}. Тег шаблона if может содержать предложения {% else %}, {% elif %}.

{% if a>0 %}
	a>0
{% elif a<0 %}
	a<0
{% else %}
	a=0
{% endif %}

Теги шаблона ifequal и ifnotequal

Один используется, чтобы определить, равны ли два значения, а другой используется, чтобы определить, не равны ли два значения.

{% ifequal a 0 %}
	a=0
{% endifequal %}
{% ifnotequal a 0 %}
	a!=0
{% endifnotequal %}

Для велосипедного шаблона этикетки

Подобно синтаксису кода Python, {% for %} используется для циклического обхода итерируемой переменной, отображая содержимое между {% for %} и {% endfor %} при каждом цикле.

{% empty %}#Проверяем, не пуст ли список

иметь списки переменных списка

lists=[{'naem':1},{'naem':2},{'naem':3},{'naem':4},]
使用for循环模板标签遍历lists列表

{% for user in lists%}
{{ user.name}}
{% empty %} #判断列表是否为空
 无数据
{% endfor %}

Встроенные параметры для меток цикла for

●forloop.counter:从1开始返回当前循环的索引值。
●forloop.counter0:从0开始返回当前循环的索引值。
●forloop.revcounter:返回当前循环的倒序索引值,从最大索引值起始,最后到值1。●forloop.revcounter0:返回当前循环的倒序索引值,从最大索引值起始,最后到值0。
●forloop.first:返回布尔值,表示当前循环是不是第一次循环。
●forloop.last:返回布尔值,表示当前循环是不是最后一次循环。
●forloop.parentloop:本层循环的外层循环(父循环)。

пример:

{% for user in lists%}
第{{ forloop.counter }}个name是:
{{ user.name}}
{% empty %} #判断列表是否为空
 无数据
{% endfor %}