2017-02-15 5 views
0

Ich versuche, eine Erfolgsmeldung nach der Anmeldung mit dem django Message-Framework zu setzen, aber die Nachricht wird nie angezeigt! Ich weiß, viele Leute vor der gleichen Frage gefragt, und ihre Nachricht wird nicht wegen ihrer Einstellungen angezeigt. Ich habe meine Einstellungen überprüft, viele Dinge scheinen gut, aber es funktioniert immer noch nicht. Wer weiß warum? vielleicht ist mein Render nicht gut?Django Nachricht funktioniert nicht

meine Einstellungen:

INSTALLED_APPS = [ 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    ... 

] 

MIDDLEWARE = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
] 

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [#other dir, os.path.join(BASE_DIR, 'templates')], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 

meine Sicht:

def connexion(request): 
    error = False 

    if request.method == "POST": 
     form = loginForm(request.POST) 
     if form.is_valid(): 
      email = form.cleaned_data["email"] 
      mdp = form.cleaned_data["mdp"] 
      user = authenticate(email=email, password=mdp) 
      if user: 
       login(request, user) 
       messages.success(request, 'Form submission successful') 

     else: 
       error = True 

    else: 
     form = loginForm() 



    return render(request, 'login.html', locals()) 

meine Vorlage login.html:

<form id="loginform" name="loginform" method="POST" action="/welcome"> 
     {% csrf_token %} 
     {{ form.as_p }} 
     <button>Valider</button> 

auch wenn der Benutzer die Form, die er zu einer anderen Vorlagen geht einreichen : welcome.html (hier wo ich die Nachricht anzeigen möchte)

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

(Beachten Sie, dass ich bereits den Code oben in login.html zu kopieren versucht, aber es funktioniert auch nicht.)

die welcome.html Ansicht:

def welcome(request): 
    #messages.success(request, 'Form submission successful') I tried this too 
    #messages.add_message(request, messages.INFO, 'Hello world.') 
    return render_to_response('welcome.html') 

Am mit Python 3.5, Django 1.10.4

Antwort

0

Es ist, weil Sie render_to_response in Ihrer willkommenen Ansicht anstelle von render verwenden.

+0

es Ihnen danken! diese Arbeit ! aber ich habe jetzt mehrere nachrichten haha ​​ist das wegen der schleife? – blabla

+0

Vermutlich liegt es an all den fehlgeschlagenen Versuchen. Jetzt haben Sie sie angezeigt, sie werden gelöscht. –

+0

@DanielRoseman Können Sie erläutern, warum es nicht mit render_to_response funktioniert, Kontext anfordern? –

0

Wenn Sie den Kontextprozessor verwenden, sollte Ihre Vorlage mit einem RequestContext gerendert werden. Stellen Sie andernfalls sicher, dass Nachrichten für den Vorlagenkontext verfügbar sind.

render() Verwendung Request automatisch, wenn Sie render_to_response() Sie verwenden es zu zwingen, mit RequestContext

+0

ja! danke ich wusste das nicht :) Ich werde render() verwenden – blabla