Django扩展管理员索引

时间:2014-09-09 15:23:41

标签: python django django-admin

我希望对Django管理界面进行一些修改(具体来说,删除“更改”链接,同时将模型名称保留为页面链接以更改实例)。我可以通过从管理应用程序复制和粘贴index.html并对模板进行修改来实现这一点,但我宁愿只通过扩展模板来覆盖违规部分 - 但是我不确定如何实现这个模板有相同的名字。我也愿意接受实现这种效果的替代方法。 (django 1.7,python 3.4.1)

5 个答案:

答案 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'

https://stackoverflow.com/a/39964906/24718

答案 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 %}