gpt4 book ai didi

python - Django - 将联系表单添加到页脚

转载 作者:太空宇宙 更新时间:2023-11-03 21:26:49 25 4
gpt4 key购买 nike

我正在尝试创建一个可在我的应用程序的所有页面上使用的联系表单。

我的函数 context_processors.py 中的 contact_form(request) 成功显示了我的基本模板扩展到的所有模板中的联系表单,但问题是我可以' t 提交信息并使用它运行 POST 请求。

经过广泛的研究,似乎唯一干净的方法是让 context_processors.py 执行 GET 请求并让自定义模板标记处理 POST 请求。

采用这种方法,我找不到在模板标记中处理此问题的方法。我尝试了几种不同的方法,并遇到了几种不同的错误。我还查看了许多帖子来达到这一点,包括 Contactform in footer of page ,并且似乎没有任何答案显示模板中的格式如何。

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>

最佳答案

我明白了我的问题是什么。由于我的大多数 View 都使用基于类的 View ,因此我需要添加一个单独的 post() 方法来处理 POST 请求,如下所示。基于函数的 View 不需要这样做。弄清楚这一点后,我放弃了模板标记,并将所有逻辑添加到 context_processor.py 中。

views.py

class HomeView(TemplateView):
template_name = 'services/home.html'

def post(self, request):
return render(request, self.template_name)

context_processors.py

def contact_form(request):
if request.method == 'GET':
contact_form = ContactForm()
context = {'contact_form': contact_form}
else:
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 context

关于python - Django - 将联系表单添加到页脚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53789043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com