1

我设置了一条 django 消息,当用户登录时会显示该消息,但这些消息仅显示在管理员中。

帐户/views.py


def login_page(request):
    form = LoginForm(request.POST or None)
    context = {
        'form':form
    }
    next_ = request.GET.get('next')
    next_post = request.POST.get('next')
    redirect_path = next_ or next_post or None
    if form.is_valid():
        username = form.cleaned_data.get("username")
        password = form.cleaned_data.get("password")
        user = authenticate(request, username=username,password=password)
        if user is not None:
            login(request, user)
            try:
                del request.session['guest_email_id']
            except:
                pass
            if is_safe_url(redirect_path,request.get_host()):
                return redirect(redirect_path)
            else:
                messages.info(request,"You are now logged in")
                return redirect("/")
        else:
            messages.error(request,"Something went wrong")
            print("Error")
    return render(request,"accounts/login.html", context)

设置.py

MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'

'OPTIONS': {
'context_processors': [             
    ...
    'django.contrib.messages.context_processors.messages',

base.html

{% if message is not None %} {% for message in messages %}{{ message }}{% endfor %}{% else %}{% endif %}

4

1 回答 1

2

您应该删除该{% if message is not None %}条件。特别是因为那时没有定义消息。你可以检查一下。但是你不应该检查,而只是检查真实性,比如:messagesNone

{% if messages %}
    {% for message in messages %}
        {{ message }}
    {% endfor %}
{% endif %}

但是,如果您不想在这些消息周围呈现某些内容(例如<ul> … </ul>),则可以简单地省略{% if %} … {% endif %})。

有关详细信息,请参阅有关显示消息的文档

于 2019-09-08T11:58:31.810 回答