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: