Делаю рассылку сообщений на Email. После ввода почты и нажатия на кнопку, подписка не отображается в админке и у меня появляется такая ошибка
<b>TemplateDoesNotExist at /contact/
contact/contact_form.html</b>
Request Method: GET
Request URL: http://127.0.0.1:8000/contact/?csrfmiddlewaretoken=uthT5NKvo2FVz1CJPVMuOeNfey7BzBDxyDWbNe1Yvz12UWywFai6nUyEHkX2c7qY&email=mr.kostik2014%40gmail.com
Django Version: 3.0.5
Exception Type: TemplateDoesNotExist
Exception Value:
contact/contact_form.html
Exception Location: C:\Users\user\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\template\loader.py in select_template, line 47
Python Executable: C:\Users\user\AppData\Local\Programs\Python\Python38-32\python.exe
При этом я нигде в коде не указывал "contact_form.html". Его нет, но django стучится на него. Если добавить то ничего не произойдет. Делаю по видео с ютуба.
Структура папок:
my_project/
contact/
temlatetags/
__pycache__
__init__.py
contact_tags.py
forms.py
models.py
urls.py
views.py
templates/
contact/
tags/
contact_form.html
models.py:
from django.db import models
class Contact(models.Model):
'''подписка на рассылку'''
email = models.EmailField()
date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.email
views.py:
from django.views.generic import CreateView
from .models import Contact
from .forms import ContactForm
class ContactView(CreateView):
model = Contact
form_class = ContactForm
success_url = "/"
forms.py:
from django import forms
from .models import Contact
class ContactForm(forms.ModelForm):
'''форма подписки'''
class Meta:
model = Contact
fields = ("email",)
widgets = {
"email": forms.EmailInput(attrs={"class": "form-control"})
}
urls.py проекта:
from django.conf.urls import include
from django.urls import path
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls', namespace='blog')),
path('contact/', include('contact.urls')),
path('', include('main.urls', namespace='main')),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urls.py приложения:
from django.urls import path
from .views import ContactView
urlpatterns = [
path("", ContactView.as_view(), name="contact")
]
contact_tags.py:
from django import template
from contact.forms import ContactForm
register = template.Library()
@register.inclusion_tag("contact/tags/form.html")
def contact_form():
return {"contact_form": ContactForm()}
contact_form.html
<div class="sidebar-box subs-wrap img" style="background-image: url(images/bg_1.jpg);">
<div class="overlay"></div>
<h3 class="mb-4 sidebar-heading">Newsletter</h3>
<p class="mb-4">Far far away, behind the word mountains, far from the countries Vokalia</p>
<form action="{% url 'contact' %}" class="subscribe-form">
<div class="form-group">
{% csrf_token %}
{{ contact_form }}
<input type="submit" value="Subscribe" class="mt-2 btn btn-white submit">
</div>
</form>
</div>
сайдбар, в котором располагается форма:
{% load contact_tags %}
<!-- место для формы подписки -->
{% contact_form %}