【问题标题】:Django messages framework not displaying message?Django消息框架不显示消息?
【发布时间】:2016-09-29 10:17:50
【问题描述】:

我正在尝试建立一个社区门户,并正在努力向用户显示一次性消息,例如“登录成功”等;并且正在使用 Django 的消息框架。

我的模板有以下行,目前什么都不做:

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

奇怪的是,以下每一个都有效:

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

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

由此,我得出结论,我没有正确创建、存储或传递消息。但是,我正在检查文档,我的语法似乎很好。

我的消息创建;视图.py:

def login(request):

    userName = request.POST.get('usrname',None)
    userPass = request.POST.get('psw',None)

    user = authenticate(username=sanitize_html(userName), password=userPass)

    if user is not None:
        if user.is_active:
            auth.login(request, user)
        messages.add_message(request, messages.INFO, 'Successfully logged in!')
    else:
        messages.add_message(request, messages.INFO, 'Login not successful. Please try again.')

    return HttpResponseRedirect('/home/')

我的消息检索和传递,views.py(映射到 url '/home/'):

def test(request):

    messagealert = []
    mess = get_messages(request)

    for message in mess:
        messagealert.append(message)

    if request.user.is_authenticated():
            student_user = get_student_user(request.user)
            student_user.first_name = request.user.first_name
            student_user.last_name = request.user.last_name
            student_user.email = request.user.email

            content = {
                'student_user': student_user,
                'messages': messagealert,
            }
    else:
            content = {
                'student_user': None,
                'messages': messagealert,
            }

    return render_to_response('index3.html', content)

我的 index3.html 模板是上面给出的行的模板。

我在这里错过了什么?

【问题讨论】:

    标签: python django authentication authorization django-messages


    【解决方案1】:

    不要在您的test 视图中使用render_to_response。它不运行上下文处理器,这些处理器需要将 messages 和其他有用的项目(如 user)插入上下文。

    改用render

    return render(request, 'index3.html', context)
    

    【讨论】:

    • 嘿,伙计。这对我有用。非常感谢。虽然我仍然无法在&lt;script&gt;alert();&lt;/script&gt; 中显示{{ message }},但至少它现在显示在html 中。
    猜你喜欢
    • 1970-01-01
    • 2012-07-28
    • 2021-10-26
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多