Я пытаюсь создать форму контакта, которую можно использовать на всех страницах моего приложения.
Моя функция contact_form(request)
в context_processors.py
успешно показывает форму контакта во всех шаблонах, которые расширяет мой базовый шаблон.к, но проблема в том, что я не могу отправить информацию и выполнить с ней запросы POST.
После обширных исследований кажется, что единственный чистый способ сделать это - это выполнить context_processors.py
GET-запрос и пользовательский тег шаблона обрабатывает POST-запрос.
При таком подходе я не могу найти способ обработать это в теге шаблона.Я пробовал несколько разных способов и получил несколько разных ошибок.Я также посмотрел на многие посты там, чтобы добраться до этой точки, в том числе Contactform в нижнем колонтитуле страницы , и, похоже, нет никаких ответов, которые показывают, как это отформатировано в шаблоне.
settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
...
'services.context_processors.contact_form',
],
},
},
]
context_processors.py
from .forms import ContactForm
def contact_form(request):
if request.method == 'GET':
contact_form = ContactForm()
return {'contact_form': contact_form}
return
tags.py
@register.inclusion_tag('services/headerfooter.html', takes_context=True)
def post_request(context):
request = context['request']
if request.method == 'POST':
contact_form = ContactForm(request.POST)
if contact_form.is_valid():
from_email = contact_form.cleaned_data['from_email']
message = contact_form.cleaned_data['message']
try:
send_mail(subject, message, from_email, ['t19clar@gmail.com'])
except BadHeaderError:
return HttpResponse('Invalid header found.')
context = {
'contact_form': contact_form,
'from_email': from_email,
'message': message
}
return render(request, 'services/headerfooter.html', context)
headerfooter.html
{% load tags %}
<form method="post">
<div class="messages"></div>
<div class="controls">
<div class="form-group">
{% csrf_token %}
{{ contact_form.as_p }}
{% post_request %}
</div>
<input type="submit" class="btn btn-outline-light" value="Send message">
</div>
</form>