Latest web development tutorials

шаблон Джанго

В последней главе мы используем 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, выходные результаты являются следующие: