Вопрос в одном из учебников Кори Шафера по 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 является одним из таких.

enter image description here

Таким образом, сообщения являются универсально доступными для каждого шаблона. Подробнее вы можете прочитать здесь 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',
            ],
        },
    },
]

Здесь вы можете увидеть сообщения контекстного процессора.

Вернуться на верх