Remplacer et étendre simultanément les modèles d'administration de Django
Le remplacement des modèles d'administration de Django est un besoin courant pour personnaliser l'interface d'administration. Cependant, vous pouvez être confronté à un dilemme lorsque vous souhaitez à la fois remplacer et étendre un modèle, tout en tirant parti du chargeur de modèles AppDirectories.
Remplacer ou étendre
Dans Django , le remplacement d'un modèle implique le remplacement complet du fichier de modèle existant, tandis que l'extension vous permet d'ajouter du contenu à des blocs spécifiques au sein du modèle.
Défis liés au chargeur de modèles AppDirectories
Le Le chargeur de modèles AppDirectories présente un défi lors du remplacement et de l'extension des modèles d'administration. Lors de l'utilisation de ce chargeur, Django s'attend à ce que le modèle étendu réside dans le même répertoire que le modèle d'origine. Cela peut devenir problématique si les modèles d'administration se trouvent dans une autre application.
Solutions existantes
Chargeur de modèles personnalisés :
La solution recommandée consiste à utiliser un chargeur de modèles personnalisé qui prend en charge l'extension des modèles dans les répertoires d'applications. Un de ces chargeurs est disponible sur DjangoSnippets.org.
Personnalisation du chargeur de modèles de Django :
Une autre option consiste à personnaliser le chargeur de modèles AppDirectories de Django pour permettre l'extension de modèles à partir d'applications spécifiques. Cela implique de créer une classe de chargeur de modèles personnalisée qui hérite du chargeur AppDirectories et de modifier son comportement.
Les plans futurs de Django
Au moment d'écrire ces lignes, Django ne prend pas en charge nativement étendre les modèles à travers les répertoires d'applications. Cependant, il existe un problème ouvert sur GitHub proposant cette fonctionnalité. S'il était mis en œuvre, cela simplifierait considérablement le processus de remplacement et d'extension des modèles d'administration Django.
Exemple d'utilisation avec le chargeur personnalisé :
En utilisant le chargeur de modèles personnalisé mentionné ci-dessus, vous peut implémenter les éléments suivants dans votre modèle :
{% extends "admin:admin/index.html" %} {% block sidebar %} {{block.super}} <div> <h1>Extra links</h1> <a href="/admin/extra/">My extra link</a> </div> {% endblock %}
Ce code étend le modèle d'index d'administration avec du contenu de barre latérale supplémentaire, remplaçant et étendant efficacement le modèle d'origine.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!