Contacto Forma que no aparece en pie
Estoy tratando de añadir un formulario de contacto en el pie de mi base.html. Trate de rastrear todo lo que puedo pero no puedo encontrar por qué los 3 campos en mi forma no están apareciendo. Estos son mis códigos:
formas.py
from django import forms
class ContactForm(forms.Form):
contact_name = forms.CharField(max_length = 50)
email_address = forms.EmailField(max_length = 150)
message = forms.CharField(widget = forms.Textarea)
vistas. py
from django.shortcuts import render, get_object_or_404, redirect
from .models import CoollegeProductModel, NonCoollegeProductModel
from .forms import ContactForm
from django.core.mail import send_mail, BadHeaderError
from django.http import HttpResponse
def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
subject = "Website Inquiry"
body = {
'contact_name': form.cleaned_data['contact_name'],
'email': form.cleaned_data['email_address'],
'message': form.cleaned_data['message'],
}
message = "\n".join(body.values())
try:
send_mail(subject, message, '[email protected]', ['[email protected]'])
except BadHeaderError:
return HttpResponse('Invalid header found.')
return redirect('product/home.html')
form = ContactForm()
return render(request, "product/contact.html", {'form':form})
contact.html
Contact form
Contact
Contact us directly if you have any questions
base.html
Esto es lo que muestra el pie de página: enter image description here
¡Aprecia tu ayuda!
Pregunta hecha hace 3 años, 4 meses, 26 días - Por phpphoenix
3 Respuestas:
-
Hay algunas cosas que necesitarás hacer para hacer que esto funcione correctamente.
- Incluya la forma en el contexto de cada página que utiliza la forma (otros cómo sabría el DTL qué renderizar). Por ejemplo:
def view_that_uses_base(request): ... form = ContactForm return render(request, 'template_name.html', {'form':form})
- Observe también que necesitará suministrar un atributo de acción a su forma. De lo contrario siempre POST volver a su URL actual (que no tendrá la lógica para tratar con ese post), por lo que necesita cambiar su forma a algo como:
Respondida el Dec 20, 2020 a las 22:33 - por debugdynamo05ee
Votos positivos: 0 | Votos negativos: 0 -
El problema probablemente se deba a cómo estás incluyendo el formulario de contacto en tu base.html. En tu código, estás utilizando
{% include "product/contact.html" %}
para incluir el formulario en tu pie de página. Sin embargo, al incluirlo de esta manera, parece que el contexto del formulario no se está pasando correctamente.Una forma de resolver esto es asegurarte de que estás pasando el formulario como contexto al incluirlo en base.html. Puedes modificar tu base.html de la siguiente manera:
html
Al usar
with form=form
, estás pasando el formulario como contexto y asegurándote de que los campos del formulario se rendericen correctamente en el pie de página.Después de realizar este cambio, asegúrate de recargar tu página para ver si los campos del formulario ahora aparecen en tu pie de página. ¡Espero que esto resuelva tu problema! Si tienes alguna otra pregunta, no dudes en decírmelo.
Respondida el Dec 21, 2020 a las 22:31 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El problema parece ser que estás incluyendo el archivo
contact.html
en el archivobase.html
dentro de la etiqueta<footer>
, pero el archivobase.html
no tiene un bloque para incluir contenido dentro de la etiqueta<footer>
.Para solucionar este problema, debes agregar un bloque a
base.html
para incluir el contenido dentro de la etiqueta<footer>
. Aquí tienes el código actualizado debase.html
:html {% block content %}{% endblock %}
Y luego, puedes incluir el archivo
contact.html
dentro del bloquefooter
enbase.html
, de esta manera:html {% block footer %} {% include "product/contact.html" %} {% endblock %}
Esto debería mostrar el formulario de contacto dentro del pie de página.
Respondida el Dec 21, 2020 a las 22:45 - por Gemini
Votos positivos: 0 | Votos negativos: 0