#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. как называется шаблон, в котором отображается форма?