简体   繁体   English

Django-在user_logged_out信号上渲染视图

[英]Django - Render view on user_logged_out signal

I would like to be able to render a different logged out template when the user_logged_out signal is fired. 我希望能够在触发user_logged_out信号时呈现不同的注销模板。 I can catch the signal and check for my condition correctly, and I have a view with a named URL that works just fine, but I can't seem to render the view. 我可以捕获信号并正确检查我的状况,并且我有一个带有命名URL的视图,该视图可以正常工作,但似乎无法呈现该视图。

I've tried each of these, with both a class based and functional view, but can't get them to work. 我已经使用基于类和功能的视图尝试了所有这些方法,但是无法使其正常工作。 Using ipdb I can get a template to render in the console, but can't figure out the right way to return it/call the view to have it returned. 使用ipdb,我可以获得在控制台中呈现的模板,但是无法找出正确的方式来返回它/调用视图以使其返回。 Thoughts? 思考?

@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())

A signal handler is not a view, it cannot render/return a response. 信号处理程序不是视图,它无法呈现/返回响应。

You could simply handle logic in your own view, and call or redirect to the auth logout function from there. 您可以简单地在自己的视图中处理逻辑,然后从那里调用或重定向到auth注销函数。 Something like below.. 像下面这样。

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)

Found a clever solution allowing a redirect from anywhere, if you really need to. 找到了一个聪明的解决方案,可以根据需要从任何地方重定向。 https://djangosnippets.org/snippets/2541/ https://djangosnippets.org/snippets/2541/

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

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