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

{% csrf_token %} {{ form.as_p }}

base.html

  
{% include "product/contact.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.

    1. 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})
    
    1. 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:
      
    {% csrf_token %} {{ form.as_p }}

    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
    
    {% include "product/contact.html" with form=form %}

    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 archivo base.html dentro de la etiqueta <footer>, pero el archivo base.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 de base.html:

    html
    {% block content %}{% endblock %}
    
    
    {% block footer %}{% endblock %}

    Y luego, puedes incluir el archivo contact.html dentro del bloque footer en base.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