Это 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>
Шаблон примечания
Комментарии также можно использовать на языках шаблонов, например {# ××× #}
单行注释形式如下。
{# 这里写注释 #}
多行注释要使用注释标签。
{% 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>
Теги шаблона
Встроенные теги шаблона
тег шаблона, если
Для справки, хотя он и помещен в файл 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 %}