我如何在自定义的 Django 模型管理中使用 csrf 令牌?
How can i use csrf token in customised django model admin?
我在一个简单的 Django 项目中工作,我想为管理中的每个模型对象添加一个按钮,我可以使用它来创建它:
在 admin.py
class RegistrationAdmin(admin.ModelAdmin):
def button(self, obj):
isreg = obj.username
return format_html('<form action="/validate/" method="post">{% csrf_token %}<script>x={{isreg}};</script><button class="btn btn--pill btn--green"'
' type="submit">Validate</button></form>', {'isreg': isreg})
button.short_description = 'Action'
button.allow_tags = True
list_display = ['username', 'button']
但是当我执行它时出现关键错误:
KeyError at /admin/myapp/registration/
'% csrf_token %'
那么如何解决这个错误呢?
要么
有没有其他方法可以为我的验证按钮添加功能?
如果您要为每个实例创建一个新操作,您可以这样做:
from django.conf.urls import url
from django.contrib import admin
from django.http import HttpResponseRedirect
from django.utils.html import format_html
class RegistrationAdmin(admin.ModelAdmin):
list_display = ['username', 'button']
def button(self, obj):
return format_html('<a href="new-action/{}">{}</a>', obj.id, obj.username)
def get_urls(self):
urls = super().get_urls()
my_urls = [
url(r'^new-action/(?P<id>[0-9]+)$', self.new_action)
]
return my_urls + urls
def new_action(self, request, id):
if request.user.is_authenticated:
# your stuff
self.message_user(request, 'ID {} successfully processed'.format(id))
return HttpResponseRedirect('/admin')
@Danilo Akamine 提供的解决方案对我来说效果很好。
但那些有同样问题的人可能需要:
url 方法在:
my_urls = [
url(r'^new-action/(?P<id>[0-9]+)$', self.new_action)
]
属于
django.conf.urls
所以将这一行添加到 admin.py:
from django.conf.urls import url
或者您也可以使用 django.urls 中的路径方法:
my_urls = [
path('new-action/<int:id>', self.new_action)
]
了解更多信息:
访问 https://docs.djangoproject.com/en/2.2/topics/http/urls/
我在一个简单的 Django 项目中工作,我想为管理中的每个模型对象添加一个按钮,我可以使用它来创建它:
在 admin.py
class RegistrationAdmin(admin.ModelAdmin):
def button(self, obj):
isreg = obj.username
return format_html('<form action="/validate/" method="post">{% csrf_token %}<script>x={{isreg}};</script><button class="btn btn--pill btn--green"'
' type="submit">Validate</button></form>', {'isreg': isreg})
button.short_description = 'Action'
button.allow_tags = True
list_display = ['username', 'button']
但是当我执行它时出现关键错误:
KeyError at /admin/myapp/registration/
'% csrf_token %'
那么如何解决这个错误呢? 要么 有没有其他方法可以为我的验证按钮添加功能?
如果您要为每个实例创建一个新操作,您可以这样做:
from django.conf.urls import url
from django.contrib import admin
from django.http import HttpResponseRedirect
from django.utils.html import format_html
class RegistrationAdmin(admin.ModelAdmin):
list_display = ['username', 'button']
def button(self, obj):
return format_html('<a href="new-action/{}">{}</a>', obj.id, obj.username)
def get_urls(self):
urls = super().get_urls()
my_urls = [
url(r'^new-action/(?P<id>[0-9]+)$', self.new_action)
]
return my_urls + urls
def new_action(self, request, id):
if request.user.is_authenticated:
# your stuff
self.message_user(request, 'ID {} successfully processed'.format(id))
return HttpResponseRedirect('/admin')
@Danilo Akamine 提供的解决方案对我来说效果很好。 但那些有同样问题的人可能需要: url 方法在:
my_urls = [
url(r'^new-action/(?P<id>[0-9]+)$', self.new_action)
]
属于 django.conf.urls 所以将这一行添加到 admin.py:
from django.conf.urls import url
或者您也可以使用 django.urls 中的路径方法:
my_urls = [
path('new-action/<int:id>', self.new_action)
]
了解更多信息: 访问 https://docs.djangoproject.com/en/2.2/topics/http/urls/