我想在检查用户的user_settings
是否存在后运行重定向(如果不存在,则将用户带到输入和保存它们的表单)。
我想将用户重定向到适当的表单,并向他们提供消息,让他们知道他们需要“保存设置”,以便他们知道为什么被重定向。
该函数如下:
def trip_email(request):
try:
user_settings = Settings.objects.get(user_id=request.user.id)
except Exception as e:
messages.error(request, 'Please save your settings before you print mileage!')
return redirect('user_settings')
这个函数检查用户设置并适当地重定向我,但消息从未出现在模板的顶部。
你可能会首先想:“Django中的消息设置正确吗?”
我有其他功能,在那里我使用消息而不是重定向,消息显示为预期的模板,没有问题。消息已经适当地集成到我的模板中,并且可以正常工作。
只有当我使用“redirect”时,我才看不到我发送的消息。
如果我像下面这样使用“render”,我就会看到消息(但是,URL不会更改 - 我希望这种情况发生)。
def trip_email(request):
try:
user_settings = Settings.objects.get(user_id=request.user.id)
except Exception as e:
messages.error(request, 'Please save your settings before you print mileage!')
form = UserSettingsForm(request.POST or None)
return render(request, 'user/settings.html', {'form': form})
我有一些其他地方需要使用重定向redirect
,因为这样做在功能上是有意义的 - 但我也希望将消息传递给这些重定向页面。
user_settings
函数如下:
def user_settings(request):
try:
user_settings = Settings.objects.get(user_id=request.user.id)
form = UserSettingsForm(request.POST or None, instance=user_settings)
except Settings.DoesNotExist:
form = UserSettingsForm(request.POST or None)
if request.method == 'POST':
settings = form.save(commit=False)
settings.user = request.user
settings.save()
messages.warning(request, 'Your settings have been saved!')
return render(request, 'user/settings.html', {'form': form})
我在文档中找不到任何关于不能使用重定向发送消息的内容,但是我无法弄清楚如何显示它们。
编辑: 以下是我在模板中呈现消息的方法:
{% for message in messages %}
<div class="alert {{ message.tags }} alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
{{ message }}
</div>
{% endfor %}
我不确定这是否有影响,但似乎从某个地方调用了两次“GET”。
这两个URL的URL部分看起来像是这样的:
# ex: /trips/email
url(r'^trips/email/$', views.trip_email, name='trip_email'),
# ex: /user/settings
url(r'^user/settings/$', views.user_settings, name='user_settings'),
trip_email
中去掉 try-catch 并只保留消息和重定向时,我看不到消息。 - Hannyresponse = redirect('viewname') messages.error(request, 'wrong!') return response
(三行) - user1600649