当前位置: 首页 > 面试题库 >

如何在Django管理员更改列表视图页面中添加按钮

游炳
2023-03-14
问题内容

我想在模型的列表视图中为我的模型的“添加”按钮旁边添加一个按钮,然后创建一个视图函数,在该函数中,我将做我的工作,然后将用户重定向回列表视图。

我已经检查了如何重载管理模板,但我仍然不知道,我应该将视图函数放在哪里做我的事情,以及如何将该视图注册到管理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和处理不活动的用户。



 类似资料:
  • 问题内容: 我在admin.py中有一个带有以下类的django应用程序: 我想将这些文件用于添加页面,但将不同的字段用于更改页面。我怎样才能做到这一点? 问题答案: 首先看一下ModelAdmin类的源代码和位于中的方法。您可以覆盖这些方法,并使用kwargs获得所需的行为。例如:

  • 我正在使用WooCommerce会员插件。 在管理仪表板,当我去WooCommerce 姓名,电子邮件,计划,团队,状态,成员以来,到期 我想将USER ID添加到此列。有人知道怎么做吗?

  • 我在Google和Stackoverflow上搜索过这个,但我只是没有得到给定的示例。有人能给我解释一下吗? 我想在表视图的最后一列添加一个按钮,当它被单击时,它应该触发一个侦听器并传递buttons行的对象。我只是没有从gist中得到下面的例子。github。通用域名格式: 这是我的完整当前代码: 现在,我必须创建一个的部分是可以理解的。但是如何将其分配给列呢? 我明白这一点: 但不是这个:

  • 问题内容: 我已经在Google和Stackoverflow上进行了搜索,但没有得到给出的示例。有人可以向我解释一下。 我想在表视图的最后一列中添加一个按钮,当单击它时,它应该触发一个侦听器并传递按钮行的对象。我只是没有从 gist.github.com 得到以下示例: 这是我目前的完整代码: 现在我必须创建的部分是可以理解的。但是如何将其分配给列? 我了解这一点: 但这不是: 问题答案: 为了能

  • 问题内容: 关于扩展django管理模板的一个(不是这样)快速问题。 我试图通过在结果行(row1和row2类)之间添加一个包含一些与该对象相关的对象的中间行来更改特定模型的结果列表(在django lingo中更改列表)。 我搜索了代码,但没有找到一种方法来执行此操作。非常感谢任何指针。代码也将有所帮助。 PS:我知道我应该设计自己的界面,但这是一个内部项目,我没有太多时间可以花时间。另外,dj

  • 需要新增2个页面 第一个是WebContent/page/simple_role.jsp, 这是authority.jsp页面的外框 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.