Вопрос в одном из учебников Кори Шафера по Django
Я пытаюсь изучить Django, просматривая курс Django Кори Шафера, и я просто запутался в той части, где Кори использовал перенаправление после процесса регистрации.
if request.method == 'POST':
form = UserRegisterForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
messages.success(request, f'Account created for {username}!')
return redirect('blog-home')
else:
form = UserRegisterForm()
return render(request, 'users/register.html', {'form': form})
Он использовал return redirect('blog-home')
и смог показать сообщение Account created for {username}
в шаблоне. Но я не уверен, как ему удалось получить доступ к этому сообщению в шаблоне, не передавая его, подобно тому, как мы делаем с методом render.
Пример метода render, который я изучил, приведен ниже, он всегда передает 3-й аргумент, чтобы в шаблоне мы могли получить к нему доступ. Но я понятия не имею, как сообщение было передано через метод redirect.
return render(request, 'blog/home.html', context)
Django имеет некоторые встроенные контекстные процессоры, которые применяются поверх контекстных данных и универсально доступны в каждом шаблоне. django.contrib.messages.context_processors.messages
является одним из таких.
Таким образом, сообщения являются универсально доступными для каждого шаблона. Подробнее вы можете прочитать здесь https://docs.djangoproject.com/en/3.2/ref/templates/api/#django.template.Context . Кроме того, вы можете найти список всех контекстных процессоров в вашем файле settings.py в опциях Templates -
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [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',
],
},
},
]
Здесь вы можете увидеть сообщения контекстного процессора.