Django szablonu
W ostatnim rozdziale używamy django.http.HttpResponse () do wyjścia "Hello World!". Sposób, w jaki dane są mieszane razem z widzenia, nie spełnia MVC myślał o Django.
W tym rozdziale wyjaśnimy wam szablon aplikacji Django, szablon jest tekst prezentacji i zawartości odrębnym dokumencie.
Szablon Przykłady zastosowań
Szliśmy poprzedniej części projektu zostanie utworzona na podstawie HelloWorld katalogu szablonów katalogów i ustalenia hello plik, cała struktura katalogów jest następująca:
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
hello kod pliku jest następująca:
<h1>{{ hello }}</h1>
Wiemy ze zmiennej szablonu użyć podwójnych nawiasów.
Następnie musimy wyjaśnić ścieżki Django plik szablonu, należy zmodyfikować HelloWorld / settings.py, modyfikować szablony te katalogi na[BASE_DIR + "/ templates", ], jak następuje:
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', ], }, }, ]
Teraz zmodyfikować view.py, dodać nowy obiekt, za przekazywanie danych do szablonu:
# -*- 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', context)
Widzimy, że użyliśmy tutaj zamiast renderowania HttpResponse przed użyciem. Renderowanie również używa słownika kontekstu jako parametr.
Kluczowe elementy w słowniku kontekstowego "Hello" odpowiadają zmiennych w szablonie "{{}} cześć".
Następnie wizyta wizyta http://192.168.45.3:8000/hello/~~dobj, można znaleźć na stronie:
Następnie przeprowadziliśmy szablon do korzystania z danych wyjściowych, co pozwala przeglądać dane separacji.
Następnie będziemy wprowadzać zasady składni wspólnego wzoru.
Django znaczniki szablonu
IF / tag innego
Składnia podstawowa jest następujący:
{% if condition %} pl. display {% endif %}
lub:
{% if condition1 %} pl. display 1 {% elif condiiton2 %} pl. display 2 {% else %} pl. display 3 {% endif %}
Zgodnie z warunkami, które określają, czy mocy. if / else obsługuje zagnieżdżone.
{% If%} tag przyjmuje i czy też nie, aby orzeczenie o słowa kluczowe do wielu zmiennych lub zmiennych odwrócone (nie), na przykład:
{% if athlete_list and coach_list %} athletes 和 coaches 变量都是可用的。 {% endif %}
etykiet
{% For%} umożliwia nam iteracyjne nad sekwencji.
A sprawa Pythona podobnych wypowiedzi, składnia pętli for X w Y, Y jest sekwencją pętli nad i X jest zmienną nazwa używana w konkretnym cyklu.
Przy każdym przejściu pętli system szablonów uczyni wszystko {% for%} {%}% endfor zawartość między i.
Na przykład, biorąc pod uwagę listę sportowców athlete_list zmiennych, możemy użyć następującego kodu, aby wyświetlić tę listę:<ul> {% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% endfor %} </ul>
Etykieta dodać listę być odwrócona tak, że wsteczny iterator:
{% for athlete in athlete_list reversed %} pl. {% endfor %}
Możesz być zagnieżdżone {% for%} tag:
{% for athlete in athlete_list %} <h1>{{ athlete.name }}</h1> <ul> {% for sport in athlete.sports_played %} <li>{{ sport }}</li> {% endfor %} </ul> {% endfor %}
ifequal / tag ifnotequal
{%}% Ifequal tag porównuje dwie wartości, gdy są one równe, wyświetla wszystkie wartości w% {ifequal%} i {%}% endifequal mecz.
Poniższy przykład porównuje zmienne szablonu użytkownika i dwa CurrentUser:
{% ifequal user currentuser %} <h1>Welcome!</h1> {% endifequal %}
A {% if%} Podobnie {% ifequal%} obsługuje opcjonalną {% else%} tag: 8
{% ifequal section 'sitenews' %} <h1>Site News</h1> {% else %} <h1>No News Here</h1> {% endifequal %}
Uwagi Tab
adnotacje Django za pomocą {##}.
{# 这是一个注释 #}
filtr
Filtr Szablon może być wyświetlany w zmiennej przed jego modyfikacją, postać rury filtra, co następuje:
{{ name|lower }}
{{Nazwa}} Zmienna po czym niższy proces filtrowania, dokument konwersji tekstu na wielkie litery małe.
Gniazdo rury Filtr może być *, zarówno powiedzmy, rur filtracyjnych wyjścia i mogą być wykorzystane jako dane wejściowe do następnego rurociągu:
{{ my_list|first|upper }}
Pierwszym elementem powyższego przykładu i przekonwertować go na wielkie litery.
Niektóre filtry mają parametry. Po parametrów filtracyjnych następuje dwukropek i zawsze cudzysłowach. Na przykład:
{{ bio|truncatewords:"30" }}
Zmienna ta spowoduje wyświetlenie pierwszych 30 słów bio.
Inne filtry:
- addslashes: dodać ukośnik ukośnik w przed każdym pojedynczy cudzysłów lub cudzysłów.
- Data: Naciśnij Format ciąg argumentu w określonym terminie lub datetime instancję obiektu:
{{ pub_date|date:"F j, Y" }}
- Długość: Zwraca długość zmiennej.
obejmują tag
{% Include%} tag umożliwia inną treść, która zawiera szablon w szablonie.
Poniższe dwa przykłady są zawarte nav szablon:
{% include "nav" %}
Szablon dziedziczenie
Szablony mogą dziedziczyć sposobem osiągnięcia multipleksowanie.
Następnie tworzymy katalog szablonów przed dodaniem pliku projektu base, co następuje:
<html> <head> <title>Hello World!</title> </head> <body> <h1>Hello World!</h1> {% block mainbody %} <p>original</p> {% endblock %} </body> </html>
Powyższy kod, tag bloku o nazwie mainbody jest to, że może to być następcami wymianę części.
Wszystkie {% block%} tag opowiada system szablonów, że szablony potomne mogą zastąpić tych części.
hello dziedziczone base i wymienić konkretny blok, hello Kod wprowadza się następujące zmiany:
{% extends "base" %} {% block mainbody %} <p>继承了 base 文件</p> {% endblock %}
Pierwsza linia kodu ilustruje hello dziedziczone base pliku. Widzimy tu tę samą nazwę znacznika bloku zastąpić base odpowiedniego bloku.
Ponownie adres http://192.168.45.3:8000/hello/~~dobj wyniki wyjściowe są następujące: