Latest web development tutorials

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.html 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.html

hello.html 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.html', 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 %}
     ... display
{% endif %}

lub:

{% if condition1 %}
   ... display 1
{% elif condiiton2 %}
   ... display 2
{% else %}
   ... 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 %}
...
{% 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.html szablon:

{% include "nav.html" %}

Szablon dziedziczenie

Szablony mogą dziedziczyć sposobem osiągnięcia multipleksowanie.

Następnie tworzymy katalog szablonów przed dodaniem pliku projektu base.html, 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.html dziedziczone base.html i wymienić konkretny blok, hello.html Kod wprowadza się następujące zmiany:

{% extends "base.html" %}

{% block mainbody %}
<p>继承了 base.html 文件</p>
{% endblock %}

Pierwsza linia kodu ilustruje hello.html dziedziczone base.html pliku. Widzimy tu tę samą nazwę znacznika bloku zastąpić base.html odpowiedniego bloku.

Ponownie adres http://192.168.45.3:8000/hello/~~dobj wyniki wyjściowe są następujące: