繁体   English   中英

Django-在user_logged_out信号上渲染视图

[英]Django - Render view on user_logged_out signal

我希望能够在触发user_logged_out信号时呈现不同的注销模板。 我可以捕获信号并正确检查我的状况,并且我有一个带有命名URL的视图,该视图可以正常工作,但似乎无法呈现该视图。

我已经使用基于类和功能的视图尝试了所有这些方法,但是无法使其正常工作。 使用ipdb,我可以获得在控制台中呈现的模板,但是无法找出正确的方式来返回它/调用视图以使其返回。 思考?

@receiver(user_logged_out)
def my_logged_out_signal_handler(sender, request, user, **kwargs):
    if user.has_condition:
        # tried this
        resolve(reverse('my_named_url', kwargs={'kwarg1': 'something'})).func(request, something)
        # and this
        render_to_response(resolve(reverse('my_named_url', kwargs={'kwarg1': something})).func(request, kwarg1=something).render())
        # and this
        render(MyClassView.as_view()(request, kwarg1=something))
        # and this
        return (resolve(reverse('my_named_url', kwargs={'kwarg1': something})).func(request, kwarg1=something).render())
        # and this
        return HttpResponse(resolve(reverse('my_named_url', kwargs={'kwarg1': something})).func(request, kwarg1=something).render())

信号处理程序不是视图,它无法呈现/返回响应。

您可以简单地在自己的视图中处理逻辑,然后从那里调用或重定向到auth注销函数。 像下面这样。

from django.shortcuts import redirect

def my_logout(request):
    kwargs = {}
    if my_condition:
        kwargs['template_name'] = 'my_template.html'
        kwargs['extra_context'] = ...
    return redirect('logout', **kwargs)

找到了一个聪明的解决方案,可以根据需要从任何地方重定向。 https://djangosnippets.org/snippets/2541/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM