Django 如何在视图中完成方法后实现alert()(弹出消息)

问题描述 投票:0回答:4

我想在 view.py 中的方法完成后收到一条alert()消息(就像在javascript中一样)

我的方法是

def change_password(request):
    dictData = getInitialVariable(request)

    in_username = request.POST['txt_username']
    in_password = request.POST['txt_password']
    in_new_password = request.POST['txt_new_password']


    user = authenticate(username=in_username, password=in_password)
    if user is not None:
        if user.is_active:
            u = User.objects.get(username=in_username)
            u.set_password(in_new_password)
            u.save()

            # Redirect to a success page.
            return HttpResponseRedirect('/profiles/'+in_username)

u 保存到数据库后,将显示弹出消息。 我怎样才能实现它?

django popup alert message
4个回答
29
投票

我认为最好的解决方案是消息(docs

消息级别文档中所述Django建议使用“INFO”级别消息与用户通信。

默认情况下,Django 中启用消息。如果我的示例不适合您,您应该检查 enable messages block

查看部分:

from django.contrib import messages

def change_password(request):
   ...your stuff...

   messages.info(request, 'Your password has been changed successfully!')
   return HttpResponseRedirect('/profiles/'+in_username)

模板部分:

{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}

您可以将按摩输出粘贴到特定视图或通用模板(布局/标题)中。


15
投票

有很多方法可以很好地做到这一点(例如,请参阅 Bootstrap 中的“flash”)...但这里是您如何按照字面上的要求进行操作。

在您重定向到的视图中,将消息值传递到您的模板:

return render_to_response('template_name', message='Save complete')

并在您的模板中添加以下脚本:

<script>
    alert('{{ message }}');
</script>

5
投票

在send_mail()之后添加messages.success

from django.contrib import messages

def contact(request):
    subject = request.POST['name']
    message = request.POST['message']
    recipient = settings.EMAIL_HOST_USER
    recipient = [recipient,]
    email_from = request.POST['mailing']
    send_mail( subject, message, email_from, recipient )
    messages.success(request, 'Successfully Sent The Message!')
    return redirect('send_email')  

将此代码添加到正文中的模板中

    {% if messages %}
        {% for message in messages %}
         {% if message.tags %}  <script>alert("{{ message }}")</script> {% endif %}
         
        {% endfor %}
    
    {% endif %}

-4
投票

只需重定向到 /profiles/in_username/password_updated 即可

您可以在 /profiles/in_username/password_updated 上使用 HTML 模板:

此模板重新定义了 /profiles/in_username 中使用的模板,并添加了带有警报的 JavaScript

<!DOCTYPE html>
<html lang="en">
<body>
<script>
alert("Your message");
</script>
[...]
</body>
</html>

只需在该视图中使用 render_to_response 即可:

from django.shortcuts import render_to_response
return render_to_response('mytemplate.html', {"in_username": in_username});

有关模板的更多信息,请参阅 https://docs.djangoproject.com/en/1.7/topics/templates/

© www.soinside.com 2019 - 2024. All rights reserved.