JM *_*toc 7 django redirect render
我有这个看法
def foo(request):
    context['bar'] = 'FooBar'
    return redirect('app:view')
context['bar']当我重定向到时,有'app:view'什么方法可以包含它吗?我最后的手段和替代方法是使用render()但是,我不想再次定义所有上下文变量。有没有其他方法可以解决这个问题?
Mit*_*lls 19
我会使用会话变量来通过重定向传递一些上下文。这是除了将它们作为 url 的一部分传递之外的唯一方法,它是推荐的 django 选项。
def foo(request):
    request.session['bar'] = 'FooBar'
    return redirect('app:view')
#jinja
{{ request.session.bar }}
指出了一个潜在的缺陷,而会话变量在未来的请求中被错误地使用,因为它在整个会话期间持续存在。如果是这种情况,您可以很容易地在将来的视图中通过添加再次使用它来规避此问题。
if 'bar' in request.session:
    del request.session['bar']
Oja*_*ale 11
在 Django 中,您不能通过重定向传递参数。您唯一的选择是将它们作为 URL 的一部分传递。
def foo(request):
    context['bar'] = 'FooBar'
    redirect(reverse('app:view', kwargs={ 'bar': FooBar }))
在您的 html 中,您可以从 URL 获取它们。
小智 5
我也遇到了同样的问题。我想重定向到另一个页面并显示一些消息,就我而言,这是一条错误消息。为了解决这个问题,我使用了 django 消息:https://docs.djangoproject.com/en/4.0/ref/contrib/messages/
我这样做了:
    def foo(request):
        message.error(request, 'bla bla bla')
        return redirect('foo_page')
在我的模板 foo_page.html 中:
    {% if messages %}
       {% for message in messages %}
       <div class={{ message.tags }}>{{ message }}</div>
       {% endfor %}
    {% endif %}
| 归档时间: | 
 | 
| 查看次数: | 21090 次 | 
| 最近记录: |