【问题标题】:Why Image is not being served by django?为什么 django 不提供图像?
【发布时间】:2021-08-04 09:06:17
【问题描述】:

我正在尝试显示 django 数据库中的图像。在目录的数据库图像链接中也给出了正确的。但是当我打开该链接时,它会给出错误“TemplateDoesNotExist at /media/categories/abc.png” 甚至可以在该链接上找到图像。

Models.py

from django.db import models
def upload_path(instance,filename):
    return 'categories/{filename}'.format(filename=filename)

class Categories(models.Model):
    name = models.CharField(max_length=255, unique=True)
    description = models.CharField(max_length=500)
    image_url = models.ImageField(blank=True, null = True, upload_to= upload_path)
    REQUIRED_FIELDS = ['name','description','image_url']

Settings.py

    STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
MEDIA_URL = '/media/'
CORS_ALLOW_ALL_ORIGINS = True
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'build/static')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

urls.py


from django.urls import path, include, re_path
from django.views.generic import TemplateView
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('auth/', include('djoser.urls')),
    path('admin/', admin.site.urls),
    path('auth/', include('djoser.urls.jwt')),
    path('auth/', include('djoser.social.urls')),
    path('adminuser/', include('adminuser.urls')),
]

urlpatterns += [re_path(r'^.*', TemplateView.as_view(template_name='index.html'))]
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT) 

Views.py

class CategoriesListCreateAPI(GenericAPIView, ListModelMixin , CreateModelMixin):
    queryset = Categories.objects.all()
    serializer_class = CategoriesSerializer
    permission_classes = (AllowAny,)

    def get(self, request , *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request , *args, **kwargs):
        return self.create(request, *args, **kwargs)

# Retrieve, update and delete (pk required)
class RUDCategoriesAPI(GenericAPIView, RetrieveModelMixin, UpdateModelMixin,  DestroyModelMixin):
    queryset = Categories.objects.all()
    serializer_class = CategoriesSerializer
    permission_classes = (AllowAny,)

    def get(self, request , *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)
    
    def put(self, request , *args, **kwargs):
        return self.update(request, *args, **kwargs)

    def put(self, request , *args, **kwargs):
        return self.partial_update(request, *args, **kwargs)
    
    def delete(self, request , *args, **kwargs):
        return self.destroy(request, *args, **kwargs)

当我点击链接“http://localhost:8000/media/categories/feed.png”时,请在上传图片后查看我的 API API

它给了我一个错误页面。 Error

【问题讨论】:

标签: django django-models django-rest-framework django-views


【解决方案1】:

您的网址有

urlpatterns += [re_path(r'^.*', TemplateView.as_view(template_name='index.html'))]
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT) 

第一个re_path 捕获每个请求,因此永远不会到达静态 URL。翻转这些:

urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT) 
urlpatterns += [re_path(r'^.*', TemplateView.as_view(template_name='index.html'))]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    相关资源
    最近更新 更多