шаблон Джанго
В последней главе мы используем django.http.HttpResponse () для вывода "Hello World!". То, каким образом данные смешаны вместе с тем, не соответствует MVC подумал о Django.
В этой главе мы расскажем вам шаблон приложения Джанго, шаблон представляет собой текстовый для представления и содержания отдельного документа.
Шаблон Примеры применения
Мы следовали в предыдущем разделе проекта будет создан в каталоге шаблонов каталога HelloWorld и установить файл hello.html, вся структура каталогов выглядит следующим образом:
HelloWorld/ |-- HelloWorld | |-- __init__.py | |-- __init__.pyc | |-- settings.py | |-- settings.pyc | |-- urls.py | |-- urls.pyc | |-- view.py | |-- view.pyc | |-- wsgi.py | `-- wsgi.pyc |-- manage.py `-- templates `-- hello.html
hello.html код файла выглядит следующим образом:
<h1>{{ hello }}</h1>
Мы знаем из переменной шаблона, чтобы использовать двойные круглые скобки.
Далее нам нужно объяснить путь Django файл шаблона, измените HelloWorld / settings.py, изменять стандартные шаблоны DIRS к[base_dir + "/ шаблоны", ], следующим образом :
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR+"/templates",], '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', ], }, }, ]
Теперь мы изменить view.py, добавить новый объект, для представления данных в шаблоне:
# -*- coding: utf-8 -*- #from django.http import HttpResponse from django.shortcuts import render def hello(request): context = {} context['hello'] = 'Hello World!' return render(request, 'hello.html', context)
Мы можем видеть, что мы использовали здесь вместо того, чтобы оказать HttpResponse перед использованием. оказывают также использует словарь контекст в качестве параметра.
Ключевые элементы в контекстном словаре "привет" соответствуют переменным в шаблоне "{{}} привет".
Тогда посетите визит http://192.168.45.3:8000/hello/~~dobj, вы можете увидеть страницу:
Затем мы завершили шаблон для использования выходных данных, что позволяет разделение просмотра данных.
Далее, мы будем вводить правила синтаксиса общего шаблона.
теги шаблонов Django
если / другое тег
Базовый синтаксис выглядит следующим образом:
{% if condition %} ... display {% endif %}
Или:
{% if condition1 %} ... display 1 {% elif condiiton2 %} ... display 2 {% else %} ... display 3 {% endif %}
В соответствии с условиями, чтобы определить, является ли выход. если / другое поддерживает вложенные.
{%} Если% тегов принимает и, или или не выносить суждение на ключевые слова для нескольких переменных или переменных отрицается (не), например:
{% if athlete_list and coach_list %} athletes 和 coaches 变量都是可用的。 {% endif %}
для этикеток
{%} Для% позволяет нам перебрать последовательность.
И дело в Python для подобных заявлений, синтаксис цикла для X в Y, Y представляет собой последовательность в цикле снова и X является переменной имя, используемое в каждом конкретном цикле.
Каждый раз через петлю, система шаблонов будет оказывать все {% для%} {%}% ENDFOR содержание между.
Например, учитывая список спортсменов athlete_list переменных, мы можем использовать следующий код, чтобы отобразить этот список:<ul> {% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% endfor %} </ul>
Этикетка для добавления списка на обратное, так что обратный итератор:
{% for athlete in athlete_list reversed %} ... {% endfor %}
Вы можете быть вложенными {%}% для тега:
{% for athlete in athlete_list %} <h1>{{ athlete.name }}</h1> <ul> {% for sport in athlete.sports_played %} <li>{{ sport }}</li> {% endfor %} </ul> {% endfor %}
ifequal / ifnotequal тег
{% Ifequal%} тег сравнивает два значения, когда они равны, отображаются все значения в {% ifequal%} и {%}% endifequal быть.
В следующем примере сравниваются пользователя переменные шаблона и два CurrentUser:
{% ifequal user currentuser %} <h1>Welcome!</h1> {% endifequal %}
А {%, если%} Аналогично, {% ifequal%} поддерживает необязательный {%}% еще тег: 8
{% ifequal section 'sitenews' %} <h1>Site News</h1> {% else %} <h1>No News Here</h1> {% endifequal %}
Примечания Вкладка
Django аннотаций с помощью {##}.
{# 这是一个注释 #}
фильтр
Шаблон фильтра может быть отображен в переменной перед изменением, характер фильтра трубы, следующим образом:
{{ name|lower }}
{{Name}} переменной после того, как более низкую фильтрационной обработки, документ преобразования текста в верхний регистр нижний регистр.
Гнездо фильтра труба может быть * *, как говорят, выходной фильтр труб и могут быть использованы в качестве входных данных для следующего трубопровода:
{{ my_list|first|upper }}
Первый элемент приведенного выше примера и преобразовать его в верхний регистр.
Некоторые фильтры имеют параметры. После параметров фильтра с последующим двоеточием и всегда двойные кавычки. Например:
{{ bio|truncatewords:"30" }}
Эта переменная будет отображать первые 30 слов био.
Другие фильтры:
- addslashes: добавить символ обратной косой обратной косой черты перед любой одиночной кавычки или двойные кавычки.
- Дата: Нажмите этот формат формат строки аргумента определенную дату или дату экземпляра объекта:
{{ pub_date|date:"F j, Y" }}
- длина: Возвращает длину переменной.
включают в себя тег
{%}% Включить тег позволяет другой контент, содержащий шаблон в шаблоне.
Следующие два примера включены nav.html шаблон:
{% include "nav.html" %}
Шаблон наследования
Шаблоны могут наследовать путь для достижения мультиплексирование.
Далее мы создаем каталог шаблонов перед добавлением файла base.html проекта, следующим образом:
<html> <head> <title>Hello World!</title> </head> <body> <h1>Hello World!</h1> {% block mainbody %} <p>original</p> {% endblock %} </body> </html>
Приведенный выше код, блок-тег с именем mainbody является то, что он может быть правопреемниками для замены частей.
Все {% блок%} тег указывает механизм шаблонов, что дочерние шаблоны могут переопределить эти части.
hello.html унаследовал base.html, и заменить определенный блок, код hello.html изменен следующим образом:
{% extends "base.html" %} {% block mainbody %} <p>继承了 base.html 文件</p> {% endblock %}
Первая строка кода иллюстрирует hello.html унаследовал base.html файл. Мы можем видеть здесь такое же имя блока тега, чтобы заменить base.html соответствующий блок.
Revisit адрес http://192.168.45.3:8000/hello/~~dobj, выходные результаты являются следующие: