react + django部署,问题是静态文件404错误

tjjdgumg  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(121)

我尝试过使用react作为前端部署django项目。我在react中执行了'npm run build',并将所有构建的文件移动到django项目中的'client'文件夹中,如enter image description here
我把“link”和“script”标签中的“href”都改成了./ like

<link rel="icon" href="./favicon.ico" />
<link rel="manifest" href="./manifest.json" />
<script defer="defer" src="./static/js/main.a1de6b00.js"></script>

字符串
在index.html的“客户端”文件夹中。
在setting.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'client')],
        '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',
            ],
        },
    },
]


我改变了模板的目录,

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

DEBUG = False


我还更改了静态根目录和staticfiles_dirs以及debug
在mysite/url.py

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

urlpatterns = [
    path('',TemplateView.as_view(template_name="index.html"), name='index'),
    path('admin/', admin.site.urls),
    path('api/', include('api.urls'))
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)


我为“”添加了一行代码
但是当我运行'python manage.py runserver'时,似乎仍然存在加载静态文件(如enter image description here)的问题。

06odsfpq

06odsfpq1#

我注意到你的Django项目将DEBUG设置为False,但根据截图,你似乎正在开发服务器上运行。在开发环境中,设置DEBUG = True是必不可少的;否则,可能找不到静态文件。
如果您已经将项目部署到生产环境,则需要执行python manage.py collectstatic来适当地管理静态文件。
你可以利用Django的{% static %}模板标签为你的静态文件动态生成URL。这里是一个改进的版本:

{% load static %}

<link rel="icon" href="{% static 'favicon.ico' %}" />
<link rel="manifest" href="{% static 'manifest.json' %}" />
<script defer="defer" src="{% static 'js/main.a1de6b00.js' %}"></script>

字符串
这样,{% static %}模板标记将处理静态文件的正确URL,使HTML更加灵活和适应性强。

相关问题