web-dev-qa-db-fra.com

Modèle de base de projet Django

Puis-je créer un modèle de base pour mon projet à partir duquel toutes les applications peuvent puiser? Ou dois-je créer un modèle de base pour chaque application? Et si je voulais qu'ils soient identiques, je les copierais simplement?

38
heri0n

Sûr que vous pouvez. Un exemple rapide de base.html

<!DOCTYPE html>
<html>
    <head>
        <title>My Project</title>
    </head>

    <body>
    {% block content %}{% endblock content %}
    </body>
</html>

Et dites que vous avez une application appelée myapp avec une page view.html,

{% extends "base.html" %}

{% block content %}
    <h2>Content for My App</h2>
    <p>Stuff etc etc.</p>
{% endblock content %}

Prenez le temps de lisez la documentation pour plus d'informations

61
Kenny Shen

Oui, vous pouvez absolument le faire. En utilisant les balises de modèle extends et include dans vos modèles Django.

Je commence à apprendre Django et j'ai récemment compris cela. Mon code est à Github si vous souhaitez jeter un oeil à la structure des modèles Django pour hériter d'un base.html puis d'un include éléments courants tels que la barre de navigation, l'en-tête, le pied de page etc.

6
redDragonzz

Il y a un problème dans la dernière réponse et voici le bon; vous devez avoir Base.html comme ceci:

{% load staticfiles %}

<!DOCTYPE html>
<html>
<head>
    <title>My Project</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>

et aussi pour index.html

{% extend "appname/base.html" %}
{% block content %}
     <h1>test</h1>
{% endblock %}
6
Mohammad.Gh

Oui, vous pouvez créer un modèle de base pour votre projet que d'autres applications étendront. Vérifiez @Kenny_Shen réponse sur comment.

Je voulais juste ajouter deux notes si vous êtes préoccupé par l'isolation de l'application.

  1. Si vous ne voulez pas que votre application s'appuie sur la convention de dénomination "base.html", vous pouvez injecter le nom réel avec une variable. Consultez: Comment utiliser la variable de gabarit de Django? pour plus de détails,

  2. Vous voudrez peut-être attribuer un autre nom au bloc de modèles d'application, et non au "contenu" pour éviter les conflits avec d'autres applications.

0
gmagno