将自定义按钮添加到Django应用程序的管理页面

Ale*_*mps 21 python django django-admin

我在Django中有一个应用程序,它只有管理员才能使用.我想要做的是添加一个按钮来执行管理员应用程序的此应用程序部分中的例程.

我应该为它制作一个模板,如果是这样的话,我该如何在管理员中为应用添加一个html模板.或者可能只是添加按钮的命令?

Lin*_*n B 15

与管理表单混淆可能很复杂,但我经常发现添加链接,按钮或额外信息很容易,也很有帮助.(就像一个指向相关对象的链接列表,无需进行内联,尤其是查看比查看更多的内容).

来自Django docs

由于管理模板的模块化设计,通常既不必要也不建议更换整个模板.最好只覆盖您需要更改的模板部分.

这将在表单顶部添加一个列表.

放入templates/admin/[your_app]/[template_to_override]:

{% extends "admin/change_form.html" %}

{% block form_top %}

{% for item in original.items %}
  {{ item }}
{% endfor %}

{% endblock %}
Run Code Online (Sandbox Code Playgroud)


Dyl*_*ung 10

Django1.10:

1)覆盖admin/submit_line.html:

{% load i18n admin_urls %}
<div class="submit-row">
{% if extra_buttons %}
    {% for button in extra_buttons %}
        {{ button }}
    {% endfor %}
{% endif %}
{% 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 %}
{% 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)

当然,这假定button字符串表示是一个合适的浏览器inputbutton元素,并标记为安全django.utils.safestring.mark_safe.或者,您可以使用safe模板过滤器或button直接访问属性来构造<input>.在我看来,最好将这些东西隔离到python级别.

2)覆盖MyModelAdmin.change_view:

def change_view(self, request, object_id, form_url='', extra_context=None):
    extra_context = extra_context or self.extra_context()
    return super(PollAdmin, self).change_view(
        request, object_id, form_url, extra_context=extra_context,
    )
Run Code Online (Sandbox Code Playgroud)

此方法使您可以ModelAdmin轻松地添加按钮.作为步骤(1)的替代,您可以扩展admin/change_form.html和覆盖块submit_row.由于模板中需要额外的标签,因此会稍微冗长一些.

如果您希望在所有模型(或特定子集)中提供额外操作,则ModelAdmin使用所需功能进行子类化(例如,可以向模型添加归档.您甚至可以为删除添加覆盖 - 以及其他默认值按钮 - 以便模式存档而不是删除;这将需要一些模板修改)