如何在Django管理员更改列表视图页面中添加按钮
我想在模型的列表视图中为我的模型的“添加”按钮旁边添加一个按钮,然后创建一个视图函数,在该函数中,我将做我的工作,然后将用户重定向回列表视图。
我已经检查了如何重载管理模板,但我仍然不知道,我应该将视图函数放在哪里做我的事情,以及如何将该视图注册到管理url中。
还有关于安全性的问题。我想在admin内部执行该操作,因此如果您未登录,则无法使用它。
回答:
当多个应用程序提供同一资源的不同版本(模板,静态文件,管理命令,转换)时,在INSTALLED_APPS中首先列出的应用程序具有优先权。
确保你的应用已在'django.contrib.admin'
中列出INSTALLED_APPS
。
change_list.html
在以下目录之一中创建模板:
# Template applies to all change lists.myproject/myapp/templates/admin/change_list.html
# Template applies to change lists in myapp.
myproject/myapp/templates/admin/myapp/change_list.html
# Template applies to change list in myapp and only to the Foo model.
myproject/myapp/templates/admin/myapp/foo/change_list.html
该模板应自动提取,但是如果它不在上面列出的路径之一上,则还可以通过admin模型属性来指向它:
class MyModelAdmin(admin.ModelAdmin): #...
change_list_template = "path/to/change_list.html"
你可以查找位于其中的原始change_list.html的内容path/to/your/site-packages/django/contrib/admin/templates/admin/change_list.html。另一个答案还显示了如何格式化模板。Nikolai Saiko向你展示了如何使用“扩展”和“超级”替代相关零件。摘要:
{% extends "admin/change_list.html" %} {% load i18n %} {% block object-tools-items %}
{{ block.super }}
<li>
<a class="historylink" href="...">My custom admin page</a>
</li>
{% endblock %}
让我们填写href="..."
一个URL。管理员url名称位于名称空间“ admin”中,可以这样查找:
{% url 'admin:custom_view' %}
当你向change_form.html添加按钮时,你可能希望传递当前的对象ID:
{% url 'admin:custom_view' original.pk %}
现在创建一个自定义视图。这可以是常规视图(就像你网站上的其他页面一样),也可以是admin.py中的自定义管理员视图。ModelAdmin上的get_urls方法以与URLconf相同的方式返回要用于该ModelAdmin的URL。因此,你可以按照URL调度程序中的说明扩展它们:
class MyModelAdmin(admin.ModelAdmin): def get_urls(self):
urls = super(MyModelAdmin, self).get_urls()
my_urls = patterns('',
url(r'^my_view/$', self.my_view, name="custom_view")
)
return my_urls + urls
def my_view(self, request):
# custom view which should return an HttpResponse
pass
# In case your template resides in a non-standard location
change_list_template = "path/to/change_list.html"
阅读有关如何在ModelAdmin中设置视图权限的文档:https ://docs.djangoproject.com/en/1.5/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_urls
你可以保护视图,并且仅授予具有员工身份的用户访问权限:
from django.contrib.admin.views.decorators import staff_member_required@staff_member_required
def my_view(request):
...
你可能还需要检查request.user.is_active
和处理不活动的用户。
以上是 如何在Django管理员更改列表视图页面中添加按钮 的全部内容, 来源链接: utcz.com/qa/432757.html