【问题标题】:How to cancel navigation in a django view when an error occurs发生错误时如何在 django 视图中取消导航
【发布时间】:2015-11-16 11:36:48
【问题描述】:

我想做以下事情:

  1. 我正在使用模板 1 显示 view1。有view2的链接,渲染template2
  2. 用户点击链接
  3. 处理view2时出错
  4. 现在有趣的部分来了:我想取消view2的渲染,激活一个错误信息,并显示之前的view1/template1(一种redirection,但不完全是)但是在view2我不知道我来自 view1,我也可能没有渲染 view1 时的上下文

如何重新渲染 view1,并在 view2 中生成错误消息,以便用户看到的唯一新事物就是该错误消息?完整的 template1 应该像以前一样呈现,包括用户输入的任何表单值。

这类似于表单验证,但会发生在目标视图而不是表单视图中。

这是完全可行的,还是我正在尝试做一些完全不可能的事情?

【问题讨论】:

  • 您预计会出现什么样的错误?
  • @DanielRoseman:假设在处理 view2 期间发生异常

标签: python django django-views


【解决方案1】:

似乎没有办法“中止”视图,但您可以通过以下模式获得所需的行为:

from django.contrib import messages
from django.shortcuts import redirect


def view1(request):
    if request.method == 'GET':
        initial_data = request.session.get('post_data', {})
        form = MyForm(initial=initial_data)
        ...


def view2(request):
    ...
    if error:
        request.session['post_data'] = request.POST
        messages.add_message(request, messages.ERROR, "Oops!")
        return redirect(request.META.get('HTTP_REFERER', '/'))

请参阅 this stack post 了解为什么保留 POST 数据是痛苦的,以及这样做的替代方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    相关资源
    最近更新 更多