我希望对Django管理界面进行一些修改(具体来说,删除“更改”链接,同时将模型名称保留为页面链接以更改实例)。我可以通过从管理应用程序复制和粘贴index.html并对模板进行修改来实现这一点,但我宁愿只通过扩展模板来覆盖违规部分 - 但是我不确定如何实现这个模板有相同的名字。我也愿意接受实现这种效果的替代方法。 (django 1.7,python 3.4.1)
答案 0 :(得分:5)
完成了 - 我在admin.py中设置了admin.site.index_template = "my_index.html"
,然后my_index模板可以从admin / index.html继承,而不会发生名称冲突。
答案 1 :(得分:1)
可能更干净,以覆盖AdminSite的index_template:
from django.contrib.admin.sites import AdminSite
AdminSite.index_template = '...'
尽管如此,可以通过以下方式使外部代码更友好:在绑定之前在自定义实例上更改此内容,或者在自定义AdminSite的子类化并覆盖它,然后注册该自定义AdminSite。
相关文件:
https://docs.djangoproject.com/en/dev/ref/contrib/admin/#root-and-login-templates
编辑:澄清 - 这将允许您覆盖模板中正在更改的部分,因此继承任何上游更改。
答案 2 :(得分:0)
如果要删除模型的更改权限,可以在管理类中以编程方式为模型执行此操作,而不是修改模板。这使您能够根据用户标准启用/禁用链接。更改权限将反映在更改列表,更改表单和管理员索引中。
from django.contrib import admin
from your_app.models import YourModel
class CustomModelAdmin(admin.ModelAdmin):
def has_change_permission(self, obj=None):
# check request.user creds, etc
return False
admin.site.register(YourModel, CustomModelAdmin)
有关Django管理员选项的更多信息,请参阅:https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#django.contrib.admin.ModelAdmin.has_change_permission
答案 3 :(得分:0)
有关覆盖标准管理模板(未链接到特定模型)的信息,请参见此答案。
您需要拥有一个要在其中覆盖模板集的应用程序,这些模板集在Continuous
中,是 ,'django.contrib.admin'
。
答案 4 :(得分:-1)
如果您想将新内容附加到右侧边栏,我建议使用 jQuery
{% extends "admin/index.html" %}
{% block extrahead %}
<script type="text/javascript" src="/static/admin/js/vendor/jquery/jquery.min.js"></script>
<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>
{% endblock %}
{% block sidebar %}
{{ block.super }}
<div id="extra_sidebar">
<div class="module">
<h2>Custom functions</h2>
<a style="padding-left: 15px" href="/admin/extra/">My extra link</a>
</div>
</div>
<script>
(function ($) {
$(document).ready(function ($) {
$('#content-related').prepend($('#extra_sidebar').contents());
});
})(django.jQuery);
</script>
{% endblock %}