覆盖 django admin 中的模板

tup*_*pan 2 python django templates

我正在使用 Django 1.11

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

    我把这个文件放在下面/templates/admin/my_app/my_model/

    对于这一点,我扩展并更改了一个块,就像django 文档中的示例一样

  2. 我无法覆盖一个名为submit_line.html

    我尝试将其放在/templates/admin//templates/admin/my_app/、 和下/templates/admin/my_app/my_model/。没有一个起作用。

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

我只想向模板添加一个按钮,以便用户可以下载一个 XML 文件。

nik*_*k_m 5

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

首先,在下面/templates/admin/my_app/my_model/复制粘贴submit_line.html来自django/contrib/admin/templates/admin/.

更改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>
Run Code Online (Sandbox Code Playgroud)

我们复制粘贴它是因为其中没有任何要覆盖的{% 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 %}
Run Code Online (Sandbox Code Playgroud)

最后,在您应用程序的 中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)
Run Code Online (Sandbox Code Playgroud)

就是这样!现在您应该<input type="submit" />仅在my_model添加/更改页面下看到这些额外内容。如果你想让它们全球化,只需submit_line.html从它所在的地方移动到templates/admin/。不要忘记也更新里面的路径my_app/templatetags/my_app_tags.py