JM *_*toc 7 django redirect render
我有这个看法
def foo(request):
context['bar'] = 'FooBar'
return redirect('app:view')
Run Code Online (Sandbox Code Playgroud)
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 }}
Run Code Online (Sandbox Code Playgroud)
指出了一个潜在的缺陷,而会话变量在未来的请求中被错误地使用,因为它在整个会话期间持续存在。如果是这种情况,您可以很容易地在将来的视图中通过添加再次使用它来规避此问题。
if 'bar' in request.session:
del request.session['bar']
Run Code Online (Sandbox Code Playgroud)
Oja*_*ale 11
在 Django 中,您不能通过重定向传递参数。您唯一的选择是将它们作为 URL 的一部分传递。
def foo(request):
context['bar'] = 'FooBar'
redirect(reverse('app:view', kwargs={ 'bar': FooBar }))
Run Code Online (Sandbox Code Playgroud)
在您的 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')
Run Code Online (Sandbox Code Playgroud)
在我的模板 foo_page.html 中:
{% if messages %}
{% for message in messages %}
<div class={{ message.tags }}>{{ message }}</div>
{% endfor %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21090 次 |
| 最近记录: |