Latest web development tutorials

modello di Django

Nell'ultimo capitolo usiamo django.http.HttpResponse () per l'uscita "Ciao Mondo!". Il modo in cui i dati sono mescolati insieme in vista, non soddisfa il MVC pensato di Django.

In questo capitolo spiegheremo a voi modello di applicazione Django, il modello è un testo per la presentazione e il contenuto del documento separato.


Esempi di applicazione dei modelli

Abbiamo seguito la sezione precedente del progetto sarà creato sotto HelloWorld cartella templates di directory e file di stabilire hello.html, l'intera struttura di directory è la seguente:

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

codice del file hello.html è il seguente:

<h1>{{ hello }}</h1>

Sappiamo dalla variabile modello da utilizzare parentesi doppie.

Poi abbiamo bisogno di spiegare il file del modello Django percorso, modificare il HelloWorld / settings.py, modificare modelli i DIRS a[base_dir + "/ modelli", ], come segue:

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',
            ],
        },
    },
]

Ora modifichiamo view.py, aggiungere un nuovo oggetto, per la presentazione dei dati al modello:

# -*- 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)

Possiamo vedere che abbiamo usato qui invece rendere HttpResponse prima dell'uso. il rendering utilizza anche un contesto dizionario come parametro.

Gli elementi chiave nel dizionario contesto "ciao" corrispondono alle variabili nel modello "{{ciao}}".

Poi visita visita http://192.168.45.3:8000/hello/, è possibile consultare la pagina:

Poi abbiamo completato il modello da utilizzare i dati in uscita, consentendo vista dei dati di separazione.

Avanti, introdurremo le regole sintattiche comuni di modello.


Django tag modello

se / tag altro

La sintassi di base è la seguente:

{% if condition %}
     ... display
{% endif %}

oppure:

{% if condition1 %}
   ... display 1
{% elif condiiton2 %}
   ... display 2
{% else %}
   ... display 3
{% endif %}

Secondo le condizioni per determinare se l'uscita. if / else supporta annidato.

{% Se%} tag accetta e, o fare o meno un giudizio sulle parole chiave a più variabili, o variabili negati (non), ad esempio:

{% if athlete_list and coach_list %}
     athletes 和 coaches 变量都是可用的。
{% endif %}

per le etichette

{% Per%} ci permette di iterare su una sequenza.

E il caso di Python per dichiarazioni simili, la sintassi del ciclo è per X in Y, Y è la sequenza di un ciclo su e X è un nome di variabile utilizzata in ogni ciclo particolare.

Ogni volta attraverso il ciclo, il sistema di template renderà tutto {% per%} {% endfor%} contenuti tra e.

Ad esempio, dato un elenco di variabili atleti athlete_list, possiamo utilizzare il seguente codice per visualizzare questo elenco:

<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% endfor %}
</ul>

Etichetta per aggiungere un elenco essere invertita in modo che l'iteratore inverso:

{% for athlete in athlete_list reversed %}
...
{% endfor %}

Si può essere nidificati tag {% per%}:

{% 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

tag {% IfEqual%} confronta due valori, quando sono uguali, visualizza tutti i valori in {% IfEqual%} e {% endifequal%} essere.

L'esempio seguente confronta l'utente variabili di modello e due CurrentUser:

{% ifequal user currentuser %}
    <h1>Welcome!</h1>
{% endifequal %}

E {% se%} Allo stesso modo, {% IfEqual%} supporta un tag opzionale {% else%}: 8

{% ifequal section 'sitenews' %}
    <h1>Site News</h1>
{% else %}
    <h1>No News Here</h1>
{% endifequal %}

Tab Note

annotazioni Django utilizzando {##}.

{# 这是一个注释 #}

filtro

Filtro modello può essere visualizzato nella variabile prima di modificarlo, il carattere pipe filtro, come segue:

{{ name|lower }}

{{Nome}} variabile dopo essere stato l'elaborazione del filtro inferiore, documentare convertire il testo in minuscolo maiuscolo.

attacco tubolare filtro può essere * *, entrambi dicono, un tubi filtro di uscita e può essere utilizzato come input per il successivo tubazione:

{{ my_list|first|upper }}

Il primo elemento di esempio di cui sopra e convertirlo in maiuscolo.

Alcuni filtri hanno parametri. Dopo che i parametri del filtro seguito da due punti e le virgolette doppie sempre. Ad esempio:

{{ bio|truncatewords:"30" }}

Questa variabile mostrerà i primi 30 parole del bio.

Altri filtri:

  • addslashes: per aggiungere un backslash backslash davanti a ogni singolo preventivo o doppi apici.
  • Data: Premere il formato formato argomento stringa una data specifica o un'istanza oggetto datetime:
    {{ pub_date|date:"F j, Y" }}
  • Lunghezza: restituisce la lunghezza della variabile.

includere tag

{% Include%} tag permette altro contenuto che contiene un modello nel modello.

I due esempi seguenti sono compresi template nav.html:

{% include "nav.html" %}

eredità template

I modelli possono ereditare modo per raggiungere multiplexing.

Successivamente, creiamo elenco dei modelli prima di aggiungere file di progetto base.html, come segue:

<html>
  <head>
    <title>Hello World!</title>
  </head>

  <body>
    <h1>Hello World!</h1>
    {% block mainbody %}
       <p>original</p>
    {% endblock %}
  </body>
</html>

Il codice di cui sopra, tag blocco denominato mainbody è che può essere successori per sostituire parti.

Tutti i tag {% block%} dice al motore di template che template figli possono ignorare queste parti.

hello.html ereditato base.html, e sostituire blocco specifico, il codice hello.html modificato come segue:

{% extends "base.html" %}

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

La prima riga di codice illustra hello.html ereditato file di base.html. Possiamo vedere qui lo stesso nome di tag blocco per sostituire blocco corrispondente base.html.

Rivisitare indirizzo http://192.168.45.3:8000/hello/, risultati di output sono i seguenti: