12
votes

Récursion infinie tout en prolongeant le modèle d'application de l'application de l'administrateur

J'ai le modèle suivant dans modèle / admin / changements_form.html : xxx

Cependant, pour une raison quelconque, il jette un xxx


2 commentaires

Je note que vous pouvez prolonger Change_form à ce niveau? N'a-t-il pas obligé d'être par application / modèle par exemple Modèle / admin / CMS / POST / CHANGE_FORM.HTML


@Jameso: la documentation spécifie le contraire


6 Réponses :


4
votes

Vous êtes dans admin / change_form.html et vous étendez admin / change_form.html . Vous ne pouvez pas étendre le même modèle que vous êtes dans.

Vous vous attendez probablement à ce que vous remplissez si vous remplacez le modèle de l'application Admin, vous pouvez étendre celui que vous remplacez. Mais ce n'est pas comme ça que ça marche. Lorsque vous remplacez un modèle, vous ne pouvez pas y accéder.

solution à votre problème est de copier le modèle d'origine et de changer de choses que vous n'aimez pas.


0 commentaires

3
votes

En outre, vous pouvez pointer votre Classe CODE> Classe sur un autre modèle à l'aide de la propriété Changlate_Form_Template CODE>.

Quelque chose comme: P>

{% extends "admin/change_form.html" %}


0 commentaires

2
votes

J'ai eu le même problème. Résolu en plaçant le modèle remplacé sous MyApp / Modèles / Admin / MyApp au lieu de MyApp / Modèles / Admin.


1 commentaires

Bien que la réponse acceptée fonctionne, il est un peu lourd à mon avis. C'est une meilleure réponse car, comme disent les documents, "il n'est généralement ni nécessaire ni conseillé de remplacer une gabarit entière".



0
votes

avec Django Core, c'est impossible. Mais ce n'est pas impossible.

Copier et coller "le modèle d'origine et changez de choses que vous n'aimez pas" c'est très laid.

Ne faites pas dans les modèles, tout ce que vous ne faites pas à Python

Cette solution est à tout modèle:

http://pypi.python.org/pypi/django-smart-extends < / a>



14
votes

Je sais que c'est tard, mais ...

Si s'étend - qui est une option bien meilleure que de dupliquer - la clé est de le faire appeler tout sauf /admin/change_form.html .

(Bien que l'OP a été mentionné sur Modèle / admin / Change_Form.html , c'est simplement parce qu'un chemin dans sa template_dirs Toile se termine dans '/ Modèle' - Mine se termine généralement dans ' / Modèles '- mais ces répertoires peuvent être nommés n'importe quoi et se trouvant n'importe où.)

Il sera utilisé automatiquement sur une base per-applications si elle est nommée / / /change_form.html

Il sera utilisé automatiquement sur une base par modèle si nommé / admin / / /change_form.html < p> Il peut être nommé quoi que ce soit s'il est spécifié explicitement dans la modeladmin xxx

enfin, si insiste sur le nommer /admin/change_form.html , vous Can - à condition que l'étiquette contient le chemin complet de votre installation Django au lieu d'un relatif.


1 commentaires

C'est une bonne réponse. Merci beaucoup.



1
votes

La meilleure façon de faire cela que j'ai trouvé est d'utiliser '..' .. ' code> Pour accomplir quelques répertoires, puis remonter dans des annuaires qui ne devraient être trouvés que dans le code Django base.

Comme les modèles Django sont dans quelque chose comme "django / contrib / admin / admin / admin" code>, j'ai trouvé que cela m'a travaillé: p>

{% extends "../../../../django/contrib/admin/templates/admin/change_form.html" %}


0 commentaires