我正在使用Django 1.11
我能够扩展/覆盖一个名为change_form.html
我将此文件放在/templates/admin/my_app/my_model/
对于这个,我扩展并更改了一个块,就像在django docs中的example
我不能够覆盖一个名为submit_line.html
的模板
我尝试将其放在/templates/admin/
,/templates/admin/my_app/
和/templates/admin/my_app/my_model/
下。没有工作。
我在django/contrib
下编辑了该文件并且有效,但我不想更改该文件。只是看看内容是否显示。
我只想在模板中添加一个按钮,这样用户就可以下载一个XML文件。
答案 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.html
从templates/admin/
移到my_app/templatetags/my_app_tags.py
。别忘了更新{{1}}内的路径。