如何在处理django信号后显示模板/重定向到模板



我正在尝试整合django-paypal,我需要处理一个成功或失败的信号。

我已经完成了所有的代码,但是我现在需要显示一个模板,告诉用户他们的支付是成功还是失败。

如果我return HttpResponseRedirect...什么都没有发生,我不能render_to_response,因为我没有访问上下文(我正在使用sekazai或其他东西)。

我该怎么做?

## Called when django-paypal fails to validate PDT data
def pdt_failed_transaction(sender, **kwargs):
    return HttpResponseRedirect(reverse('payment-error'))

简短的回答:你不能。这不是设计信号的目的。您需要将验证代码放入表单,并在视图中处理响应。

通过谷歌搜索发现这个问题,发现答案非常无用/没有帮助。我认为这是一个合理的好奇心,虽然Chris Pratt是正确的,你不能修改信号中的请求或响应,但想要运行一些基于用户刚刚登录的代码似乎是合理的。

如果要只在用户登录时运行包含重定向的代码,可以在settings.py https://docs.djangoproject.com/en/dev/ref/settings/#login-redirect-url中使用中间视图和LOGIN_REDIRECT_URL设置。

在settings.py:

LOGIN_REDIRECT_URL = reverse_lazy('app.views.after_login')
在app/views.py:

@login_required
def after_login(request):
    if conditions met:
        return HttpResponseRedirect(reverse('home_alt'))
    else:
        return HttpResponseRedirect(reverse('home'))

最新更新