Error after makemigrations - ImportError raised when trying to load 'easy_thumbnails.templatetags.easy_thumb nails_tags': No module named 'reportlab'
All error code.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\DEUS3\AppData\Local\Programs\Python\Python38-32\lib\threading.py", line 932, in _bootstrap_inner
self.run()
File "C:\Users\DEUS3\AppData\Local\Programs\Python\Python38-32\lib\threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "C:\Django\TestPro\venv\lib\site-packages\django\utils\autoreload.py", line 53, in wrapper
fn(*args, **kwargs)
File "C:\Django\TestPro\venv\lib\site-packages\django\core\management\commands\runserver.py", line 117, in inner_run
self.check(display_num_errors=True)
File "C:\Django\TestPro\venv\lib\site-packages\django\core\management\base.py", line 392, in check
all_issues = self._run_checks(
File "C:\Django\TestPro\venv\lib\site-packages\django\core\management\base.py", line 382, in _run_checks
return checks.run_checks(**kwargs)
File "C:\Django\TestPro\venv\lib\site-packages\django\core\checks\registry.py", line 72, in run_checks
new_errors = check(app_configs=app_configs)
File "C:\Django\TestPro\venv\lib\site-packages\django\contrib\admin\checks.py", line 76, in check_dependencies
for engine in engines.all():
File "C:\Django\TestPro\venv\lib\site-packages\django\template\utils.py", line 90, in all
return [self[alias] for alias in self]
File "C:\Django\TestPro\venv\lib\site-packages\django\template\utils.py", line 90, in <listcomp>
return [self[alias] for alias in self]
File "C:\Django\TestPro\venv\lib\site-packages\django\template\utils.py", line 81, in __getitem__
engine = engine_cls(params)
File "C:\Django\TestPro\venv\lib\site-packages\django\template\backends\django.py", line 25, in __init__
options['libraries'] = self.get_templatetag_libraries(libraries)
File "C:\Django\TestPro\venv\lib\site-packages\django\template\backends\django.py", line 43, in get_templatetag_libraries
libraries = get_installed_libraries()
File "C:\Django\TestPro\venv\lib\site-packages\django\template\backends\django.py", line 108, in get_installed_libraries
for name in get_package_libraries(pkg):
**File "C:\Django\TestPro\venv\lib\site-packages\django\template\backends\django.py", line 123, in get_package_libraries
raise InvalidTemplateLibrary(
django.template.library.InvalidTemplateLibrary: Invalid template library specified. ImportError raised when trying to load 'easy_thumbnails.templatetags.easy_thumb
nails_tags': No module named 'reportlab'**
Models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
from django.db.models.signals import post_save
from .utilities import get_timestamp_path
**class AdvUser(AbstractUser):**
is_activated = models.BooleanField(default=True, db_index=True, verbose_name='Прошел активацию?')
send_messages = models.BooleanField(default=True, verbose_name='Слать оповещения о новых комментариях?')
def delete(self, *args, **kwargs):
for bb in self.bb_set.all():
bb.delete()
super().delete(*args, **kwargs)
class Meta(AbstractUser.Meta):
pass
**class Rubric(models.Model):**
name = models.CharField(max_length=20, db_index=True, unique=True, verbose_name='Название')
order = models.SmallIntegerField(default=0, db_index=True, verbose_name='Порядок')
super_rubric = models.ForeignKey('SuperRubric', on_delete=models.PROTECT, null=True, blank=True, verbose_name='Надрубрика')
class SuperRubricManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(super_rubric__isnull=True)
class SuperRubric(Rubric):
objects = SuperRubricManager()
def __str__(self):
return self.name
class Meta:
proxy = True
ordering = ('order', 'name')
verbose_name = 'Надрубрика'
verbose_name_plural = 'Надрубрики'
**class SubRubricManager(models.Manager):**
def get_queryset(self):
return super().get_queryset().filter(super_rubric__isnull=False)
**class SubRubric(Rubric):**
objects = SubRubricManager()
def __str__(self):
return '%s - %s' % (self.super_rubric.name, self.name)
class Meta:
proxy = True
ordering = ('super_rubric__order', 'super_rubric__name', 'order',
'name')
verbose_name = 'Подрубрика'
verbose_name_plural = 'Подрубрики'
**class Bb(models.Model):**
rubric = models.ForeignKey(SubRubric, on_delete=models.PROTECT, verbose_name='Рубрика')
title = models.CharField(max_length=40, verbose_name='Товар')
content = models.TextField(verbose_name='Описание')
price = models.FloatField(default=0, verbose_name='Цена')
contacts = models.TextField(verbose_name='Контакты')
image = models.ImageField(blank=True, upload_to=get_timestamp_path,verbose_name='Изображение')
author = models.ForeignKey(AdvUser, on_delete=models.CASCADE, verbose_name='Автор объявления')
is_active = models.BooleanField(default=True, db_index=True, verbose_name='Выводить в списке?')
created_at = models.DateTimeField(auto_now_add=True, db_index=True,verbose_name='Опубликовано')
def delete(self, *args, **kwargs):
for ai in self.additionalimage_set.all():
ai.delete()
super().delete(*args, **kwargs)
class Meta:
verbose_name_plural = 'Объявления'
verbose_name = 'Объявление'
ordering = ['-created_at']
**class AdditionalImage(models.Model):**
bb = models.ForeignKey(Bb, on_delete=models.CASCADE, verbose_name='Объявление')
image = models.ImageField(upload_to=get_timestamp_path, verbose_name='Изображение')
class Meta:
verbose_name_plural = 'Дополнительные иллюстрации'
verbose_name = 'Дополнительная иллюстрация'
utilites.py
from django.template.loader import render_to_string
from django.core.signing import Signer
from datetime import datetime
from os.path import splitext
from bboard.settings import ALLOWED_HOSTS
signer = Signer()
def send_activation_notification(user):
if ALLOWED_HOSTS:
host = 'http://' +ALLOWED_HOSTS[0]
else:
host = 'http://localhost:8000'
context = {'user': user, 'host': host, 'sign': signer.sign(user.username)}
subject = render_to_string('email/activation_latter_subject.txt',context)
body_text = render_to_string('email/activation_latter_body.txt', context)
user.email_user(subject, body_text)
def get_timestamp_path(instance, filename):
return '%s%s' % (datetime.now().timestamp(), splitext(filename)[1])
urls.py
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.contrib.staticfiles.views import serve
from django.views.decorators.cache import never_cache
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('main.urls'))
]
if settings.DEBUG:
urlpatterns.append(path('static/<path:path>', never_cache(serve)))
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'main.apps.MainConfig',
'bootstrap4',
'django_cleanup',
'easy_thumbnails',
]
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
THUMBNAIL_ALIASES = {
'': {
'default': {
'size': (96, 96),
'crop': 'scale',
},
},
}
THUMBNAIL_BASEDIR = 'thumbnails'