django - Django React Image 不会显示
问题描述
所以我最近试图部署我的网站,我能够让一切正常工作。但是,由于某种原因,图像已损坏。我实际上可以很好地将图像添加到数据库中(可以很容易地添加和更改图像本身)。但是,当我单击链接时,我无处可去,而不是看到图像,只看到每当输入的 URL 不是 API 的一部分时弹出的我的网站部分(没有错误,基本上什么都没有显示)。奇怪的是,上传的图像实际上被添加到我项目中的图像文件夹中,但之后似乎 Django 找不到它们(你可以看到图像在我的图像文件夹的数据库中)。这是我的项目的布局方式,并且:这是我的一些代码:
设置.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR,'staticfiles')
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'build/static'),
]
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
REST_FRAMEWORK = {
'DEFAULT_AUTHETICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication'
]
}
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR),'EZtrade')
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'build')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
URLS.PY
urlpatterns = [
path('api-auth/', include('rest_framework.urls')),
path('admin/', admin.site.urls),
path('api/', include('articles.api.urls')),
path('rest-auth/', include('rest_auth.urls')),
path('rest-auth/registration/', include('rest_auth.registration.urls')),
re_path('.*',TemplateView.as_view(template_name='index.html')),
url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT,})
] + static(settings.MEDIA_URL,document_root = settings.MEDIA_ROOT)
API 网址
router = DefaultRouter()
router.register(r'articles', ArticleViewSet, basename='articles')
router.register(r'trade', TradeViewSet, basename='trade')
router.register(r'users', UserDataViewSet, basename='users')
urlpatterns = router.urls + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
模型
class Article(models.Model):
title = models.CharField(max_length=120)
content = models.TextField()
image = models.ImageField(upload_to = 'images', blank=True)
createdBy = models.CharField(max_length=120)
traded = models.BooleanField(default=False)
city = models.CharField(max_length=120)
def __str__(self):
return self.title
意见.PY
class ArticleViewSet(viewsets.ModelViewSet):
serializer_class = ArticleSerializer
queryset = Article.objects.all()
filter_backends = [DjangoFilterBackend,filters.SearchFilter]
filterset_fields = ['createdBy','traded']
search_fields = ['title']
authentication_classes = (TokenAuthentication,) # Add this line
permission_classes = (IsAuthenticated,)
def get_permissions(self):
if self.action == 'list' or self.action == 'retrieve':
return [AllowAny(), ]
return super(ArticleViewSet, self).get_permissions()
def patch(self, request, pk):
testmodel_object = self.get_object(pk)
serializer = TestModelSerializer(testmodel_object, data=request.data, partial=True)
if serializer.is_valid():
serializer.save()
return JsonResponse(code=201, data=serializer.data)
return JsonResponse(code=400, data="wrong parameters")
序列化器.PY
class ArticleSerializer(PatchModelSerializer):
class Meta:
model = Article
fields = ('id','title','content','image','createdBy','traded','city')
我尝试了许多不同的东西,但在互联网上找不到类似的东西,因为我在尝试访问图像时什至没有收到错误。我很坚持这一点,所以如果有人能提供帮助,那就太棒了!
解决方案
您必须使用方法制作另一个序列化程序并像这样传递图像网址
class ArticleSerializer(PatchModelSerializer):
image_url = serializers.SerializerMethodField('get_image_url')
class Meta:
model = Article
fields = ('id','title','content','image','image_url','createdBy','traded','city')
def get_image_url(self, obj):
return obj.image.url
推荐阅读
- python-3.x - Python3:写入文件,我不知道使用哪种编码?
- adaboost - 理解 Adaboost 理论的一部分的问题
- python - Python - 从网站获取 3 个随机文本
- java - Jetty 没有将我的 WAR 文件提取到临时目录中。如何阻止它提取或确保它提取到临时目录?
- javascript - React Router / Redux - 连接的组件未将 Redux 状态传递给道具
- python - 在 python 中使用 pass 语句作为使代码更具可读性的一种方式?有关系吗?
- php - 登录WordPress后重定向到访问过的页面
- c# - 如何区分 C# 中 typeof(int) == typeof(int?)
- javascript - jQuery 获取 CUT 的值
- android - RxAndroidBLE 执行 BLE 扫描,无需排队扫描操作