Latest web development tutorials

plantillas de Django

En el último capítulo se utiliza django.http.HttpResponse () a la salida "Hello World!". La forma en que los datos se mezclan entre sí con el fin, no cumple con el MVC de Django pensó.

En este capítulo vamos a explicar a usted plantilla de aplicación de Django, la plantilla es un texto para la presentación y el contenido del documento aparte.


Ejemplos de aplicación de la plantilla

Seguimos la sección anterior del proyecto se creará en HelloWorld directorio de plantillas de directorio y archivo de establecer hello.html, toda la estructura de directorios es la siguiente:

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

código de archivo hello.html es el siguiente:

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

Sabemos por la variable de plantilla a utilizar paréntesis dobles.

Lo siguiente que necesitamos para explicar el archivo de plantilla de Django ruta, modificar el HelloWorld / settings.py, modificar las plantillas de los DIRS aBASE_DIR [+ "/", plantillas ], de la siguiente manera:

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

Ahora modificamos view.py, añadir un nuevo objeto, para la presentación de los datos a la plantilla:

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

Podemos ver que usamos aquí en vez rendir HttpResponse antes de su uso. hacer que también utiliza un contexto diccionario como un parámetro.

Los elementos clave en el diccionario contexto "hola" corresponden a las variables en la plantilla "hola {{}}".

A continuación, visita la visita http://192.168.45.3:8000/hello/, se puede ver la página:

Luego completamos la plantilla a utilizar los datos de salida, que permite ver en los datos de separación.

A continuación, vamos a introducir las reglas de sintaxis de la plantilla común.


etiquetas de Django

si / tag demás

La sintaxis básica es la siguiente:

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

o:

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

De acuerdo con las condiciones para determinar si la salida. if / else soportes agrupados.

{% If%} tag acepta y, o debe o no hacer un juicio sobre las palabras clave a múltiples variables o variables negadas (no), por ejemplo:

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

para etiquetas

{% For%} nos permite iterar sobre una secuencia.

Y el caso de Python para declaraciones similares, la sintaxis del bucle es para X en Y, Y es la secuencia de bucle de una y X es un nombre de variable que se utiliza en cada ciclo particular.

En cada paso por el bucle, el sistema de plantillas le preste toda la {% for%} {%}% endfor contenido entre y.

Por ejemplo, dada una lista de variables atletas athlete_list, podemos usar el siguiente código para mostrar esta lista:

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

Etiquetar para añadir una lista que será invertido, de manera que el iterador inverso:

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

Usted puede anidar etiqueta {% for%}:

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

etiqueta {%}% ifequal compara dos valores, cuando son iguales, muestra todos los valores en el campo {% ifequal%} y {%}% endifequal ser.

El siguiente ejemplo compara el usuario variables de plantilla y dos CurrentUser:

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

Y {% if%} Del mismo modo, {}% ifequal% apoya una etiqueta opcional {% else%}: 8

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

notas Tab

anotaciones de Django usando {##}.

{# 这是一个注释 #}

filtro

filtro de plantilla se puede mostrar en la variable antes de modificarlo, el carácter de canalización del filtro, de la siguiente manera:

{{ name|lower }}

{{Nombre}} variable después de ser menor de procesamiento de filtro, documentar convertir el texto en mayúsculas en minúsculas.

empalme de tubo de filtro puede ser * *, ambos dicen, un tubos de filtro de salida y se puede utilizar como entrada para la próxima tubería:

{{ my_list|first|upper }}

El primer elemento de el ejemplo anterior y convertirlo a mayúsculas.

Algunos filtros tienen parámetros. Después de que los parámetros de filtro seguido de dos puntos y comillas dobles siempre. Por ejemplo:

{{ bio|truncatewords:"30" }}

Esta variable mostrará las primeras 30 palabras de la biografía.

Otros Filtros:

  • addslashes: para añadir una barra invertida barra invertida delante de cualquier comilla simple o comillas dobles.
  • Fecha: Pulse el formato del argumento cadena de formato de una fecha especificada o la instancia de objeto de fecha y hora:
    {{ pub_date|date:"F j, Y" }}
  • longitud: Devuelve la longitud de la variable.

incluir la etiqueta

{% Include%} etiqueta permite otro tipo de contenido que contiene una plantilla en la plantilla.

Los dos ejemplos siguientes se incluyen plantilla nav.html:

{% include "nav.html" %}

la herencia de plantillas

Las plantillas pueden heredar la manera de lograr la multiplexación.

A continuación, creamos directorio de las plantillas antes de añadir archivo de proyecto base.html, de la siguiente manera:

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

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

El código anterior, etiqueta de bloque llamado mainbody es que puede ser sucesores para reemplazar partes.

Todo etiqueta {% block%} le dice al motor de plantillas que las plantillas descendientes pueden sustituir estas piezas.

hello.html heredó base.html, y sustituir el bloque específico, el hello.html código modificado de la siguiente manera:

{% extends "base.html" %}

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

La primera línea de código ilustra hello.html heredaron archivo base.html. Podemos ver aquí el mismo nombre de etiqueta de bloque para reemplazar bloque correspondiente base.html.

Revisar http://192.168.45.3:8000/hello/ dirección, los resultados de salida son los siguientes: