【发布时间】:2021-02-24 15:20:52
【问题描述】:
我想创建一个插件,其内容根据打开页面的用户而有所不同。 我试过了:
@plugin_pool.register_plugin # register the plugin
class RubriquePluginPublisher(CMSPluginBase):
"""
RubriquePluginPublisher : CMSPluginBase
"""
model = RubriquePluginModel # model where plugin data are saved
module = "Rubrique"
name = "Rubrique plugin" # name of the plugin in the interface
render_template = "commission/rubrique_plugin.html"
def render(self, context, instance, placeholder):
context.update({'instance': instance})
query_set = Article.objects.filter(rubriques=instance.rubrique).filter(contact=self.request.user)
page = context['request'].GET.get('page_{}'.format(instance.rubrique.name)) or 1
paginator, page, queryset, is_paginated = self.paginate_queryset(page, query_set, 3)
context.update({'paginator': paginator,
'page_obj': page,
'is_paginated': is_paginated,
'articles': queryset
})
return context
但是 self.request 在 CMSPluginBase 类中不存在。 如何访问当前用户?
编辑: 我找到了解决方法。我创建了一个返回当前请求的中间件。它运作良好,但如果有人有更好的解决方案,请不要犹豫。
from django.utils.deprecation import MiddlewareMixin
_requests = {}
def get_current_request():
t = current_thread()
if t not in _requests:
return None
return _requests[t]
class RequestMiddleware(MiddlewareMixin):
def process_request(self, request):
_requests[current_thread()] = request
@plugin_pool.register_plugin # register the plugin
class PrivateRubriquePluginPublisher(CMSPluginBase):
def render(self, context, instance, placeholder):
req = get_current_request()
query_set = Article.objects.filter(contact=req.user)
【问题讨论】:
标签: django django-cms