ModelAdmin中的Django csrf_token

时间:2016-02-08 12:54:26

标签: python django django-admin django-csrf

我想在我的ModelAdmin的列表显示中添加一个表单,但无法正确呈现csrf_token。我正在使用django 1.6。我的代码如下所示:

class ApplicationAdmin(admin.ModelAdmin):
    model = Application
    list_display = ('applicant', 'approve_or_reject')

    def approve_or_reject(self, obj):
        return '<form method="post" action="/applications/approvals">{% csrf_token %}<input type="submit" class="btn-approve" name="approve" value="Approve"/></form>'

    approve_or_reject.short_description = 'Approve/Reject'
    approve_or_reject.allow_tags = True

admin.site.register(Application, ApplicationAdmin)

我一直收到错误:

  

/ management / application /'%csrf_token%'

中的KeyError

如何正确传递csrf_token?

1 个答案:

答案 0 :(得分:1)

#include <cmath> // ... double d; if (isnan(d)) // ... list_display中使用的模型管理方法应该返回文本。如果将输出标记为安全,则可以返回HTML。但是,返回值不会被视为Django模板语言,因此使用csrf标记标记将不起作用。

approve_or_reject方法中获取csrf令牌并不容易,因为您无权访问请求对象。另一个问题是整个changelist表已经包装在表单标记(approve_or_reject)中,并且表单标记不应该嵌套。

另一种方法是将您的“批准或拒绝”功能实现为admin action。用户界面会有所不同,但可能还不错。

相关问题