我想覆盖一个模型或单个应用程序的submit_line.html(要么工作 - 应用程序只有一个模型)。我在文档中看到我不能这样做(https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#templates-which-may-be-overridden-per-app-or-model)
是否有某种方法可以测试调用模板的模型或应用程序,以便添加一些条件行为?或者是否有某种方法可以使用不同的模板来代替特定应用或模型的submit_line.html?
mishbah的回答解决了我最初的问题,但现在我面临另一个问题 - 当我的代码完成时,会运行添加行的内容。我不希望这种情况发生。
这是我想要完成的事情:
这一切都有效 - 我唯一的问题是行添加到数据库中 - 我会以某种方式防止这种情况发生。
这是我的代码:
在主管理页面上,我只有添加按钮:
这是我的change_form.html:
{% extends "admin/change_form.html" %}
{% block submit_buttons_bottom %}
<style type="text/css">
#id_tool_configuration {
white-space: pre-wrap;
}
</style>
<div class="submit-row">
<input value="Configure" class="default" name="configure" onclick="configureTools(document.getElementById('id_tool_configuration').value); " />
</div>
<script src="/static/scripts/jquery-1.7.js" type="text/javascript"></script>
<script type="text/javascript">
function configureTools(tcd) {
var toolConfigData = tcd;
var request = new XMLHttpRequest();
var params = 'toolConfigData='+encodeURIComponent(toolConfigData);
request.open('GET', '{% url 'motor.configuration.views.configure' %}?'+params);
request.setRequestHeader("Content-type", "text/plain; charset=utf-8");
request.onreadystatechange = function() {
if (request.readyState == 4) {
if (request.status == 200) {
status = 'Confguration results:';
}
else {
status = 'Confguration failed';
}
$('.submit-row').after(
$('<span />')
.html('<pre> ' + status + '\n' + request.responseText + '</pre>')
.after($('<button />').text('Return').click('function () { return; }'))
);
}
};
request.send(null);
return false;
};
</script>
{%endblock%}
答案 0 :(得分:4)
可以覆盖submit-row
。只需覆盖modeladmin中的change_form
模板:
class YourModelAdmin(admin.ModelAdmin):
change_form_template = 'path/to/custom/change_form.html'
在您的自定义change_form.html
中,您需要:
{% extends "admin/change_form.html" %}
并覆盖submit_buttons_bottom
块:
{% block submit_buttons_bottom %}
{# custom submit row goes here #}
{% endblock %}
您可以定义自己的自定义submit_row
模板标签,使用原始模板标签获取灵感:
另请参阅此answer以获取有关如何确定模板路径的解决方案。
答案 1 :(得分:0)
也可以像这样覆盖/扩展最里面的 {% block submit-row %}
:
{% block submit-row %}
{% if extra_button_allowed %}
<input type="submit" value="Get me tea" name="_get_tea" />
{% endif %}
{{ block.super }}
{% endblock %}
通过这种方式,您可以保持“保存”按钮的原始行为。
submit-row
块来自 django/contrib/admin/templates/admin/submit_line.html
模板。