Latest web development tutorials

modelo de Django

No último capítulo usamos django.http.HttpResponse () para a saída "Olá mundo!". A forma como os dados são misturados com vista, não satisfaz a MVC pensou em Django.

Neste capítulo, vamos explicar-lhe modelo de aplicativo Django, o modelo é um texto de apresentação e documento separado conteúdo.


Exemplos de aplicação de modelo

Seguimos a seção anterior do projeto será criado sob HelloWorld diretório de modelos de diretório e estabelecer arquivo hello.html, toda a estrutura de diretórios é a seguinte:

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 arquivo hello.html é a seguinte:

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

Sabemos da variável de modelo para usar parênteses duplos.

Em seguida, precisamos explicar o arquivo de modelo de Django caminho, modifique o HelloWorld / settings.py, modificar modelos os DIRS para[BASE_DIR + "/ templates", ], como 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',
            ],
        },
    },
]

Vamos agora modificar view.py, adicionar um novo objeto, para enviar os dados para o modelo:

# -*- 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 nós usamos aqui em vez tornar HttpResponse antes do uso. rende também utiliza um dicionário contexto como um parâmetro.

Os elementos-chave no dicionário de contexto "Olá" correspondem às variáveis ​​no modelo "Olá {{}}".

Então visite visita http://192.168.45.3:8000/hello/, você pode ver a página:

Em seguida, completou o modelo para usar os dados de saída, permitindo a separação visualização de dados.

Em seguida, vamos introduzir as regras de sintaxe modelo comum.


tags de template do Django

tag if / else

A sintaxe básica é a seguinte:

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

ou:

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

De acordo com as condições para determinar se a saída. if / else suportes agregados.

{% If%} tag aceita e, ou ou não fazer um julgamento sobre as palavras-chave para múltiplas variáveis ​​ou variáveis ​​negadas (não), por exemplo:

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

para etiquetas

{% For%} nos permite interagir sobre uma sequência.

E o caso do Python para declarações semelhantes, sintaxe laço é para o X em Y, Y é a sequência de varrer e X é um nome de variável utilizada em cada ciclo particular.

Cada vez através do loop, o sistema modelo irá prestar toda a {% for%} {% endfor%} de conteúdo entre e.

Por exemplo, dada uma lista de variáveis ​​atletas athlete_list, podemos usar o seguinte código para exibir esta lista:

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

Rotular para adicionar uma lista a ser invertida para que o iterador inversa:

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

Pode ser aninhadas {% 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 compara dois valores, quando eles são iguais, exibe todos os valores na {% ifequal%} e {% endifequal%} ser.

O exemplo a seguir compara o usuário variáveis ​​de modelo e dois currentuser:

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

E {% if%} Da mesma forma, {% ifequal%} suporta uma {else%}% tag opcional: 8

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

Tab notas

anotações Django usando {##}.

{# 这是一个注释 #}

filtro

filtro de modelo pode ser exibido na variável antes de modificá-lo, o personagem tubo de filtro, como segue:

{{ name|lower }}

{{Nome}} variável depois de ser processamento de filtro inferior, documentar converter texto em minúsculas letras maiúsculas.

pipe socket filtro pode ser * *, ambos dizem, um tubos de filtro de saída e pode ser usado como entrada para o próximo gasoduto:

{{ my_list|first|upper }}

O primeiro elemento do exemplo acima e convertê-lo em maiúsculas.

Alguns filtros possuem parâmetros. Depois de os parâmetros de filtro, seguida de dois pontos e citações sempre duplos. Por exemplo:

{{ bio|truncatewords:"30" }}

Esta variável exibirá os primeiros 30 palavras do bio.

Outros Filtros:

  • addslashes: para adicionar uma barra invertida barra invertida na frente de qualquer aspas simples ou duplas.
  • data: Pressione o formato dos argumentos seqüência de formato de uma data especificada ou instância objeto de data e hora:
    {{ pub_date|date:"F j, Y" }}
  • comprimento: Retorna o comprimento da variável.

incluem tag

{% Include%} tag permite que outro conteúdo que contém um modelo no modelo.

Os dois exemplos a seguir estão incluídas modelo nav.html:

{% include "nav.html" %}

herança de templates

Os modelos podem herdar a maneira de conseguir multiplexação.

Em seguida, criamos diretório de modelos antes de adicionar arquivo de projeto base.html, como segue:

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

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

O código acima, tag bloco nomeado mainbody é que ele pode ser sucessores para substituir as peças.

Todos {% block%} tag diz ao motor modelo que modelos de criança pode substituir essas peças.

hello.html herdou base.html, e substituir bloco específico, o hello.html código modificado da seguinte forma:

{% extends "base.html" %}

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

A primeira linha de código ilustra hello.html herdou arquivo base.html. Podemos ver aqui o mesmo nome da tag bloco para substituir bloco correspondente base.html.

Revisitar http://192.168.45.3:8000/hello/ endereço, resultados de saída são as seguintes: