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

Lea*_*imh 8 django alert message popup

我想在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)
Run Code Online (Sandbox Code Playgroud)

将u保存到数据库后,将显示弹出消息。我该如何实施?

dyl*_*rei 11

有很多方法可以很好地做到这一点(例如,请参阅 Bootstrap 中的“flash”)……但这里是您按字面意思执行的方法。

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

return render_to_response('template_name', message='Save complete')
Run Code Online (Sandbox Code Playgroud)

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

<script>
    alert('{{ message }}');
</script>
Run Code Online (Sandbox Code Playgroud)


Ale*_*x T 11

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

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

默认情况下,在Django中启用消息。如果我的示例对您不起作用,则应选中启用消息块

查看部分:

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)
Run Code Online (Sandbox Code Playgroud)

模板部分:

{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

您可以在特定视图或常规模板(布局/页眉)中粘贴按摩输出。


小智 5

在 send_mail() 之后添加 messages.success

从 django.contrib 导入消息

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')  
Run Code Online (Sandbox Code Playgroud)

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

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

        {% endfor %}

    {% endif %}
Run Code Online (Sandbox Code Playgroud)