我正在尝试在 Django 管理员的列表显示中显示绝对 URI:
from django.contrib import admin
class MyAdmin(admin.ModelAdmin):
list_display = (
'full_uri',
)
readonly_fields = (
'full_uri',
)
def full_uri(self, obj):
return u'<a href="{url}">{url}'.format(
url = request.build_absolute_uri(reverse('view_name', args=(obj.pk, )))
)
full_uri.allow_tags = True
问题 - 我无权访问请求对象(其中build_absolute_uri
定义)。
我试图在本地覆盖changelist_view
和存储请求,但这不是线程安全的。
我也尝试过这个解决方案,但它不是很优雅。
还有其他想法吗?
编辑:
这是一个安全的解决方案:
def changelist_view(self, request, extra_context=None):
self.request = request
try:
return super(MyAdmin,self).changelist_view(request, extra_context=extra_context)
finally:
self.request = None
编辑2: