Le template est une couche de présentation qui gère complètement la partie de l'interface utilisateur.
La vue est utilisée pour exécuter la logique métier et interagir avec un modèle pour transporter des données et restituer un modèle.
Créer le dossier exemple "firstproject/stock/templates".
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
'firstproject/stock/templates'
],
from django.shortcuts import render
from .models import Article, Entree, Sortie
def etat(request):
solde = []
for p in Article.objects.raw('SELECT * FROM stock_article'):
article = p.nom
article_id = p.id
e = Entree.objects.raw(
'SELECT article_id as id, sum(quantite) as quantite FROM stock_entree where article_id = '+str(article_id))
s = Sortie.objects.raw(
'SELECT article_id as id,sum(quantite) as quantite FROM stock_sortie where article_id = '+str(article_id))
qe = 0 if e[0].quantite is None else e[0].quantite
qs = 0 if s[0].quantite is None else s[0].quantite
solde.append({'id': article_id, 'article': article, 'entree': qe,
'sortie': qs, 'solde': qe-qs})
return render(request=request, template_name='index.html', context={'data': solde})
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bootstrap demo</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
</head>
<body>
<h1>Hello, world!</h1>
<table class="table">
<thead>
<tr>
<th scope="col">Id</th>
<th scope="col">Article</th>
<th scope="col">Entrée</th>
<th scope="col">Sortie</th>
<th scope="col">Solde</th>
</tr>
</thead>
<tbody>
{% for d in data %}
<tr>
<th scope="row">{{ d.id }}</th>
<td>{{ d.article }}</td>
<td>{{ d.entree }}</td>
<td>{{ d.sortie }}</td>
<td>{{ d.solde }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"
integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4"
crossorigin="anonymous"></script>
</body>
</html>