【问题标题】:Django deployment Failed to load resource: the server responded with a status of 404 (Not Found)Django部署加载资源失败:服务器响应状态为404(未找到)
【发布时间】:2021-07-31 16:53:39
【问题描述】:

我在媒体文件夹中上传了一些产品图片,在开发服务器中显示正常,但部署后我收到 404 ressource not found 错误。

在settings.py中

STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),
os.path.join(BASE_DIR, 'node_modules')]

STATIC_ROOT = os.path.join(BASE_DIR, 'productionStatic')

STATICFILES_FINDERS = [
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]

MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_URL = '/media/'

在 urls.py 中

from django.contrib import admin
from django.urls import path
from index import views
from index.views import indexPage, hdnytorv
from webshopRestaurant.views import hd2900_webshop_Main, AddressCheckForDeliverability, ChangeItemQuantity
from webshopCustomer.views import TakeawayCheckout, totalPriceDeliveryPossible, DeliveryForm, PickUpForm, localDeliveryCheckoutAddressCheck, Payment, PaymentComplete
from django.conf import settings
from django.conf.urls.static import static

admin.autodiscover()

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', indexPage.as_view(), name = 'index'),
    path('hdnytorv', hdnytorv.as_view(), name='hdnytorv'),
    path('hd2900', views.hd2900.as_view(), name='hd2900'),
    path('hd2900_takeaway_webshop', hd2900_webshop_Main.as_view(), name="hd2900_takeaway_webshop"),
    path('check-address-for-deliverable', AddressCheckForDeliverability.as_view()),
    path('changeItemQuantityInBasket', ChangeItemQuantity.as_view()),
    path('isPriceAboveDeliveryLimit', totalPriceDeliveryPossible.as_view()),
    path('hdbynight', views.hdbynight.as_view(), name='hdbynight'),
    path('takeawayCheckout', TakeawayCheckout.as_view()),
    path('deliveryFormCheckout', DeliveryForm.as_view()),
    path('pickupFormCheckout', PickUpForm.as_view()),
    path('local_delivery_checkout_is_address_deliverable', localDeliveryCheckoutAddressCheck.as_view()),
    path('localDeliveryPayment', Payment.as_view()),
    path('paymentComplete', PaymentComplete.as_view()), 
] 

#When in production medida url must always be added to urlpatterns
#if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

在我的 html 模板中显示产品

<img class="card-img embed-responsive-item" src="{% get_media_prefix %}{{ item.product.image_path }}" alt="{{item.meta_description}}">

图片上传到这个位置 django_project_folder/media/productImages。我保证它归 www-data 组所有,而且 media 和所有子文件夹都拥有 775 访问权限。在开发服务器中,图像显示正常,但在生产中出现 404 not found 错误。

【问题讨论】:

    标签: django django-views web-deployment


    【解决方案1】:

    这个问题是重复的。查看答案here我通过在urls.py中添加修复它

    from django.urls.conf import re_path
    from django.views.static import serve
    
    re_path(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}), 
    

    【讨论】:

      猜你喜欢
      • 2015-12-01
      • 2018-08-09
      • 1970-01-01
      相关资源
      最近更新 更多