Я не могу отобразить форму Django

#python #django

#python #django

Вопрос:

Я пытаюсь создать контактную форму, но ее html-шаблон не видит шаблон {{form }} . Что я делаю не так? Где ошибка.

Мой код прилагается выше.

models.py

 
class Contact(models.Model):
 listing = models.CharField(max_length=200)
 listing_id = models.IntegerField()
 name = models.CharField(max_length=200)
 email = models.EmailField()
 phone = models.CharField(max_length=100)
 message = models.TextField(blank=True)
 file = models.FileField(upload_to='files/%Y/%m/%d/', blank=True)
 contact_date = models.DateTimeField(default=datetime.now, blank=True)
 user_id = models.IntegerField(blank=True)


 def __str__(self):
     return self.name

 def get_absolute_url(self):
     return reverse('listings', kwargs={'pk': self.pk})
 
 

В views.py файл

 class ContactCreate(CreateView):
    model = Contact
    form_class = ContactForm
    template_name = 'listing.html'
 

urls.py

 from django.urls import path
from . import views

urlpatterns = [
       path('listings/<int:pk>/', views.ContactCreate.as_view(), name='contact-create')
]

 

HTML

     <form action="{% url 'contact-create' pk=listing.pk %}" method="post">
       
        {{ form }}
        {% csrf_token %}

        <input type="submit" value="Send" class="btn btn-block btn-secondary">
    </form>
 

forms.py

 class ContactForm(forms.ModelForm):
    class Meta:
        model = Contact
        fields = ['name','email','phone','file']

 

Не могли бы вы мне помочь, пожалуйста

Ответ №1:

Если вы предоставляете form_class with ContactForm , Django ожидает предоставления формы, поэтому у вас есть два варианта:

Создайте form.py и добавьте следующее:

 from django import forms

class ContactForm(forms.Form):
    name = forms.CharField()
    message = forms.CharField(widget=forms.Textarea)
 

Не забудьте добавить это в свой вид:

 from myapp.forms import ContactForm
 

Если вы хотите, чтобы ваша пользовательская форма отображалась, вы должны указать form_class в своем представлении создания:

 form_class = ContactForm
 

Если вы используете пользовательский шаблон для отображения своей формы, добавьте в свое представление создания следующее:

 template_name = 'listing.html' # or the path to your template
 

Комментарии:

1. У меня есть forms.py файл, забыл его записать. Я исправил вопрос. Но форма по-прежнему не отображается. Я не могу понять, в чем ошибка

2. в моем файле есть «from .forms import ContactForm». views.py файл

3. @Юрий1982 см. Редактирование из моего вопроса, вы должны добавить form_class в свой create view

4. Я добавил это, но ничего не изменилось — класс ContactCreate(CreateView): form_class = ContactForm model = Contact

5. как называется шаблон, в котором отображается форма?