如何只发送一条警报消息来响应请求,而不必发送专门为警报制作的模板?
我正在使用 Javascript 异步调用。我只需要警报 html 响应即可呈现
InnerHTML
查看
@login_required(login_url="/login/")
@csrf_protect
def usersave(request):
msg = messages.add_message(request, messages.WARNING, "This is a demo. First complete all info to save.")
return render(request, msg) # Want to send just msg instead of a template for an alert.
在 Django 中,你不能直接将
messages.add_message
的结果渲染成响应。
messages
框架设计用于与模板一起使用,在模板中你可以显示添加的任何消息。
为了只发送警报消息而不渲染完整模板,你可以返回一个 JSON 响应,其中包含警报消息,然后在你的 JavaScript 代码中使用它来显示警报。
以下是更新后的
usersave
视图:
from django.http import JsonResponse
from django.contrib import messages
from django.contrib.auth.decorators import login_required
@login_required(login_url="/login/")
@csrf_protect
def usersave(request):
messages.add_message(request, messages.WARNING, "This is a demo. First complete all info to save.")
return JsonResponse({'message': "This is a demo. First complete all info to save."})
在这个更新后的视图中:
-
我们导入了
JsonResponse
。 -
我们没有渲染模板,而是使用警报消息创建了一个字典,并使用
JsonResponse
返回它。
现在,在你的 JavaScript 代码中,你可以解析这个 JSON 响应并使用该消息显示警报:
fetch('/usersave/')
.then(response => response.json())
.then(data => {
alert(data.message);
});
这将显示一个带有从 Django 视图发送的消息的警报。
请记住: 你仍然需要在你的基本模板中包含 Django 的消息框架,以便处理任何其他需要在模板中显示的消息。
标签:python,django,django-views From: 78800764