【问题标题】:Django - Render view on user_logged_out signalDjango - 在 user_logged_out 信号上呈现视图
【发布时间】:2015-05-18 23:01:35
【问题描述】:

我希望能够在触发 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())

【问题讨论】:

标签: django django-views


【解决方案1】:

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

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

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)

【讨论】:

    【解决方案2】:

    找到了一个聪明的解决方案,允许从任何地方重定向,如果你真的需要的话。 https://djangosnippets.org/snippets/2541/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 2019-07-27
      • 2017-12-09
      • 2012-01-26
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多