Django csrf_token 和 ModelAdmin
Django csrf_token in ModelAdmin
我想将表单添加到我的 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)
我一直收到错误消息:
KeyError at /management/application/ '% csrf_token %'
如何才能正确通过csrf_token?
list_display
中使用的模型管理方法,例如 approve_or_reject
应该 return 文本。如果将输出标记为安全,则可以 return HTML。但是,return 值不会像 Django 模板语言那样处理,因此使用 csrf 令牌标记将不起作用。
在 approve_or_reject
方法中获取 csrf 令牌并不容易,因为您无权访问请求对象。另一个问题是整个变更列表 table 已经包含在表单标签中 (id="changelist-form"
),表单标签不应嵌套。
另一种方法是将您的 'approve or reject' 功能实现为 admin action。 UI 会有所不同,但可能已经足够好了。
我想将表单添加到我的 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)
我一直收到错误消息:
KeyError at /management/application/ '% csrf_token %'
如何才能正确通过csrf_token?
list_display
中使用的模型管理方法,例如 approve_or_reject
应该 return 文本。如果将输出标记为安全,则可以 return HTML。但是,return 值不会像 Django 模板语言那样处理,因此使用 csrf 令牌标记将不起作用。
在 approve_or_reject
方法中获取 csrf 令牌并不容易,因为您无权访问请求对象。另一个问题是整个变更列表 table 已经包含在表单标签中 (id="changelist-form"
),表单标签不应嵌套。
另一种方法是将您的 'approve or reject' 功能实现为 admin action。 UI 会有所不同,但可能已经足够好了。