Latest web development tutorials

Django modèle

Dans le dernier chapitre, nous utilisons django.http.HttpResponse () à la sortie "Bonjour tout le monde!". La façon dont les données sont mélangées avec une vue, ne répond pas à la MVC pensait Django.

Ce chapitre, nous allons vous expliquer Django modèle d'application, le modèle est un texte de présentation et de contenu document distinct.


Modèle Exemples d'application

Nous avons suivi la section précédente du projet sera créé sous HelloWorld répertoire des modèles de répertoire et d'établir le fichier hello.html, la structure de répertoire entier est comme suit:

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

Code de fichier hello.html est la suivante:

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

Nous savons par la variable de modèle à utiliser des parenthèses doubles.

Ensuite , nous devons expliquer le fichier de modèle Django de chemin, modifier le HelloWorld / settings.py, modifier TEMPLATES les DIRS à[Base_dir + "/ templates", ], comme suit:

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

Nous modifions maintenant view.py, ajouter un nouvel objet, pour la soumission des données au modèle:

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

Nous pouvons voir que nous avons utilisé ici au lieu de rendre HttpResponse avant utilisation. rendre utilise aussi un contexte dans le dictionnaire en tant que paramètre.

Les éléments clés dans le dictionnaire de contexte "bonjour" correspondent aux variables dans le modèle "{{}} bonjour".

Puis visite visite http://192.168.45.3:8000/hello/, vous pouvez voir la page:

Ensuite, nous avons complété le modèle à utiliser les données de sortie, permettant vue des données de séparation.

Ensuite, nous allons introduire les règles de syntaxe de modèle commun.


Django balises de modèle

if / else tag

La syntaxe de base est la suivante:

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

Ou:

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

Selon les conditions pour déterminer si la sortie. if / else prend en charge imbriqué.

{% Si%} tag accepte et, ou ou non de porter un jugement sur les mots clés à plusieurs variables ou variables niées (non), par exemple:

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

pour les étiquettes

{% For%} nous permet d'itérer sur une séquence.

Et le cas de Python pour des déclarations similaires, la syntaxe de la boucle est pour X dans Y, Y est la séquence en boucle sur et X est un nom de variable utilisé dans chaque cycle particulier.

Chaque fois à travers la boucle, le système de template rendra tout {% for%} {% endfor%} contenu entre et.

Par exemple, étant donné une liste de variables de athlètes, nous pouvons utiliser le code suivant pour afficher cette liste:

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

Étiquette pour ajouter une liste à être inversée de telle sorte que l'itérateur inverse:

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

Vous pouvez être imbriqué {% 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 compare deux valeurs, quand ils sont égaux, affiche toutes les valeurs dans le {% ifequal%} et {% endifequal%} être.

L'exemple suivant compare l'utilisateur des variables de modèle et deux currentuser:

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

Et {% if%} De même, {% ifequal%} prend en charge une option {% else%} tag: 8

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

onglet notes

annotations Django en utilisant {##}.

{# 这是一个注释 #}

filtre

filtre Modèle peut être affiché dans la variable avant de le modifier, le caractère pipe de filtre, comme suit:

{{ name|lower }}

{{Name}} variable après être traitement de filtre inférieur, le document convertir le texte en minuscules en majuscules.

tubulure de filtre peut être *, autant dire, un tuyaux de filtre de sortie et peut être utilisé comme entrée pour le prochain pipeline:

{{ my_list|first|upper }}

Le premier élément de l'exemple ci-dessus et de le convertir en majuscules.

Certains filtres ont des paramètres. Après les paramètres du filtre suivi par deux points et citations toujours doubles. Par exemple:

{{ bio|truncatewords:"30" }}

Cette variable affichera les 30 premiers mots de la bio.

Autres Filtres:

  • addslashes: pour ajouter une barre oblique inverse backslash devant toute apostrophe ou des guillemets.
  • Date: Appuyez sur le format format argument de chaîne une date déterminée ou instance d'objet datetime:
    {{ pub_date|date:"F j, Y" }}
  • longueur: Renvoie la longueur de la variable.

inclure tag

{% Inclure%} tag permet tout autre contenu qui contient un modèle dans le modèle.

Les deux exemples suivants sont inclus modèle nav.html:

{% include "nav.html" %}

héritage Template

Les modèles peuvent hériter moyen de parvenir à un multiplexage.

Ensuite, nous créons répertoire des modèles avant d'ajouter le fichier de projet base.html, comme suit:

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

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

Le code ci-dessus, balise de bloc nommé mainbody est qu'il peut être successeurs pour remplacer les pièces.

Tous les {% block%} balise indique le moteur de template que les modèles enfants peuvent remplacer ces pièces.

hello.html hérité base.html, et remplacer le bloc spécifique, le hello.html de code modifié comme suit:

{% extends "base.html" %}

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

La première ligne de code illustre hello.html hérité fichier base.html. Nous pouvons voir ici le même nom du bloc tag pour remplacer le bloc correspondant base.html.

Revisitez adresse http://192.168.45.3:8000/hello/, les résultats de sortie sont les suivantes: