在django admin中覆盖模板

时间:2017-03-29 18:29:58

标签: python django templates

我正在使用Django 1.11

  1. 我能够扩展/覆盖一个名为change_form.html

    的模板

    我将此文件放在/templates/admin/my_app/my_model/

    对于这个,我扩展并更改了一个块,就像在django docs中的example

  2. 能够覆盖一个名为submit_line.html的模板

    我尝试将其放在/templates/admin//templates/admin/my_app//templates/admin/my_app/my_model/下。没有工作。

    我在django/contrib下编辑了该文件并且有效,但我不想更改该文件。只是看看内容是否显示。

  3. 我只想在模板中添加一个按钮,这样用户就可以下载一个XML文件。

1 个答案:

答案 0 :(得分:4)

经过一些测试和研究,这是解决方案。

首先,在/templates/admin/my_app/my_model/下面submit_line.html复制粘贴django/contrib/admin/templates/admin/的{​​{1}}。

更改submit_line.html并添加您喜欢的任何网址。说:

<!-- submit_line.html -->

{% load i18n admin_urls %}
<div class="submit-row">
{% if show_save %}<input type="submit" value="{% trans 'Save' %}" class="default" name="_save" />{% endif %}
{% if show_delete_link %}
    {% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %}
    <p class="deletelink-box"><a href="{% add_preserved_filters delete_url %}" class="deletelink">{% trans "Delete" %}</a></p>
{% endif %}

<!-- NEW SUBMIT INPUTS -->
<input type="submit" value="TEST" name="_saveasnewss" />
<input type="submit" value="TEST 2" name="_saveasnews" />
<!-- END NEW SUBMIT INPUTS -->

{% if show_save_as_new %}<input type="submit" value="{% trans 'Save as new' %}" name="_saveasnew" />{% endif %}
{% if show_save_and_add_another %}<input type="submit" value="{% trans 'Save and add another' %}" name="_addanother" />{% endif %}
{% if show_save_and_continue %}<input type="submit" value="{% trans 'Save and continue editing' %}" name="_continue" />{% endif %}
</div>

我们正在复制粘贴它,因为{% block %}内的任何change_form.html代码都没有覆盖。

接下来,在change_form.html内,添加以下内容:

<!-- change_form.html -->

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

{% load my_app_tags %} /* Change "my_app" to your app name that will contain the 'submit_row' template tag */

OTHER OVERRIDES HERE

{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}

最后,在您应用的templatetags中,添加此模板标记:

# my_app/templatetags/my_app_tags.py

from django.contrib.admin.templatetags.admin_modify import submit_row
from django.template.loader import get_template
from django import template

# this would be the path to your "submit_line.html"
t = get_template('admin/my_app/my_model/submit_line.html')
register = template.Library()
register.inclusion_tag(t, takes_context=True)(submit_row)

那就是它!现在,您应该只在<input type="submit" />添加/更改页面下看到这些额外的my_model。如果您想要全局移动,只需将submit_line.htmltemplates/admin/移到my_app/templatetags/my_app_tags.py。别忘了更新{{1}}内的路径。