Ich habe diese Frage umbenannt, nachdem ich tiefer getaucht bin und festgestellt habe, dass das Root-Problem dazu geführt hat, dass die Nachrichten nicht angezeigt wurden.Django Redirects funktioniert nicht wie erwartet
Ich versuche, auf eine Aktionsstatusseite umzuleiten, um ein Warning/Success-Banner anzuzeigen, wenn eine bestimmte Django-Ansicht eine Nachricht zurückgibt, um den Benutzer zu informieren, dass ich keine Formulare verwende.
Unten ist der Code, den ich vorher gesehen habe gefragt, lass es mich wissen, wenn Sie mehr brauchen!
settings.py
INSTALLED_APPS = [
'serversignup.apps.ServersignupConfig',
'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': [],
'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',
],
},
},
]
message.html
{%extends 'serversignup/base.html' %}
{% block content %}
<div class="col-sm-2 col-md-12 main-content">
{% if messages %}
<div class="alert alert-warning">
{% for message in messages %}
<strong>Action Failed: </strong> {{ message }}
{% endfor %}
</div>
{% endif %}
{% endblock %}
aktualisieren ich einen Test erstellt, das funktioniert, und den Code aus dem Test gespiegelt, aber es tut nicht arbeiten. Test unten.
views.py
def test(request):
messages.add_message(request, messages.WARNING, 'Success in signing out')
return redirect('/messageAlert')
def update_signout_status(request):
if request.method == 'POST':
...
...
...
else:
messages.add_message(request, messages.WARNING, 'This machine has already been claimed.')
return redirect('/mesageAlert')
def message_alert(request):
return render(request, 'serversignup/message.html', {})
urls.py
urlpatterns = [
url(r'^test/$', views.test, name='test'),
url(r'^messageAlert/$', views.message_alert, name='alerts'),
url(r'^updateSignoutStatus/$', views.update_signout_status, name='update_signout_status'),
]
Google Chrome Netzwerk Inspektor zeigt folgendes:
Szenario # 1: POST Anfrage geht an 'updateSignoutStatus /'
Request URL:http://x.x.x.x/updateSignoutStatus/
Request Method:POST
Status Code:302 Found
...
Request URL:http://x.x.x.x/messageAlert
Request Method:GET
Status Code:301 Moved Permanently (from disk cache)
...
Request URL:http://x.x.x.x/messageAlert/
Request Method:GET
Status Code:200 OK
Verhalten
Seite ändert sich nicht auf die umgeleitet Seite.
[17/May/2017 09:30:32] "POST /updateSignoutStatus/ HTTP/1.1" 302 0
[17/May/2017 09:30:32] "GET /messageAlert/ HTTP/1.1" 200 1454
Szenario 2: GET Anfrage geht an 'test /'
Request URL:http://x.x.x.x/test/
Request Method:POST
Status Code:302 Found
...
Request URL:http://x.x.x.x/messageAlert
Request Method:GET
Status Code:301 Moved Permanently
...
Request URL:http://x.x.x.x/messageAlert/
Request Method:GET
Status Code:200 OK
Verhalten
Seite DOES auf die umgeleitet Seite ändern.
[17/May/2017 09:23:25] "GET /test HTTP/1.1" 301 0
[17/May/2017 09:23:26] "GET /test/ HTTP/1.1" 302 0
[17/May/2017 09:23:26] "GET /messageAlert HTTP/1.1" 301 0
[17/May/2017 09:23:26] "GET /messageAlert/ HTTP/1.1" 200 1446
Edit # 1: Modified Code aktuellen Zustand zu reflektieren nach Einsicht empfangen, wie Nachrichten arbeiten, Problem weiterhin besteht nach wie vor.
Bearbeiten # 2: Hinzugefügt mehr Kontext zu index.html & views.py-Code.
Bearbeiten # 3: Update zum Thema.
Ich habe die Schleife entfernt und es immer noch nicht angezeigt, danke für den Rat, aber ich wusste das nicht. – Chex