diff --git a/backend/app/admin.py b/backend/app/admin.py index 98cc39d..68cf6d3 100644 --- a/backend/app/admin.py +++ b/backend/app/admin.py @@ -69,3 +69,4 @@ class PlaceAdmin(admin.ModelAdmin): list_display = ['title', 'category', 'sort', 'created'] search_fields = ['title'] list_filter = ['category'] + change_list_template = 'admin/place_tools.html' diff --git a/backend/app/models/place.py b/backend/app/models/place.py index 3726a97..7c23525 100644 --- a/backend/app/models/place.py +++ b/backend/app/models/place.py @@ -81,16 +81,17 @@ class Place(models.Model): return rv def update_cover_image(self): - path = self.fixed_os_path('cov.jpg') if self.image: img = Image.open(self.image.path) thumb = ImageOps.fit(img, (600, 400)) # img.thumbnail((600, 400)) - path.parent.mkdir(parents=True, exist_ok=True) + path = self.image.path.replace('img.jpg', 'cov.jpg') + # path.parent.mkdir(parents=True, exist_ok=True) thumb.save(path, 'jpeg') - else: - if path.exists(): - os.remove(path) + # else: + # path = self.fixed_os_path('cov.jpg') + # if path.exists(): + # os.remove(path) @staticmethod def update_json(): @@ -115,6 +116,11 @@ class Place(models.Model): }) return rv + @staticmethod + def recreateThumbnails() -> None: + for x in Place.objects.all(): + x.update_cover_image() + @receiver(post_delete, sender=Place) def on_delete_Place(sender, instance: 'Place', using, **kwargs): diff --git a/backend/app/urls.py b/backend/app/urls.py new file mode 100644 index 0000000..cc28291 --- /dev/null +++ b/backend/app/urls.py @@ -0,0 +1,23 @@ +from django.http import HttpRequest, JsonResponse +from django.urls import path + +from app.models.place import Place + + +def run_tool(request: HttpRequest): + if request.method != 'POST': + return JsonResponse({'error': 'unsupported method type'}) + + action = request.POST.get('action') + + if action == 'generate-thumbnails': + Place.recreateThumbnails() + else: + return JsonResponse({'error': 'unknown action'}) + + return JsonResponse({'success': 'ok'}) + + +urlpatterns = [ + path('tool/', run_tool, name='exec-tool'), +] diff --git a/backend/config/settings.py b/backend/config/settings.py index 8c66288..b40343b 100644 --- a/backend/config/settings.py +++ b/backend/config/settings.py @@ -68,7 +68,7 @@ ROOT_URLCONF = 'config.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [], # BASE_DIR / 'templates' + 'DIRS': [BASE_DIR / 'templates'], # BASE_DIR / 'templates' 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ diff --git a/backend/config/urls.py b/backend/config/urls.py index 285dab3..ce5b180 100644 --- a/backend/config/urls.py +++ b/backend/config/urls.py @@ -23,4 +23,5 @@ from django.urls import include, path urlpatterns = [ path(settings.ADMIN_URL, admin.site.urls), path('', include('common.urls')), + path('app/', include('app.urls')), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/backend/templates/admin/place_tools.html b/backend/templates/admin/place_tools.html new file mode 100644 index 0000000..0f40489 --- /dev/null +++ b/backend/templates/admin/place_tools.html @@ -0,0 +1,14 @@ +{% extends "admin/change_list.html" %} + +{% block object-tools-items %} +{{ block.super }} +
  • +
    + {% csrf_token %} + +
    +
  • +{% endblock %}