You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署Django项目至Railway时遭遇模板不存在错误求助

部署Django到Railway时「Django template does not exist」错误排查与解决

错误信息

django.template.loaders.filesystem.Loader: /app/client/client/public/index.html (Source does not exist)

相关代码

project/settings.py

from pathlib import Path
import os

BASE_DIR = Path(__file__).resolve().parent.parent
    
DEBUG = True

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',
            ],
        },
    },
]

WSGI_APPLICATION = 'project.wsgi.application'

DATABASES = {
    'default': {
      'ENGINE': 'django.db.backends.postgresql_psycopg2',
      'NAME': 'game-api',
      'HOST': 'localhost',
      'PORT': 5432
    }
}


ROOT_URLCONF = 'project.urls'

STATIC_URL = '/static/'

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

import dj_database_url
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

project/views.py

from django.shortcuts import render

def index(request):
    return render(request, 'build/index.html')

项目结构

项目根目录包含两个核心文件夹:

  • client:前端文件目录,内部有public子目录(存放index.html及静态资源)
  • project:Django项目核心配置目录

问题分析

从日志路径/app/client/client/public/index.html能看出,Django模板查找时出现了路径嵌套错误。结合配置和文件结构,核心问题是模板目录配置与实际文件路径不匹配:

  1. TEMPLATES.DIRS设置为BASE_DIR/client,但前端index.html实际在BASE_DIR/client/public下
  2. 视图中渲染的build/index.html是不存在的路径,实际应该指向public/index.html

解决方案

1. 修正模板目录配置

修改settings.py中的TEMPLATES.DIRS,指向正确的前端模板目录:

TEMPLATES = [
    {
        # 其他配置保持不变
        'DIRS': [os.path.join(BASE_DIR, 'client', 'public')],
        # 其他配置保持不变
    },
]

2. 修正视图中的模板路径

将views.py中的渲染路径改为实际存在的文件(已将DIRS指向public目录,直接写文件名即可):

def index(request):
    return render(request, 'index.html')

3. 确保部署时文件被正确包含

检查项目的.gitignore文件,确认client/public目录没有被排除,否则Railway部署时无法获取到模板文件。

4. 优化生产环境配置(可选但推荐)

  • 将DEBUG改为生产环境适配的动态配置:
    DEBUG = os.environ.get('DEBUG', 'False') == 'True'
    
  • 补充静态文件配置,适配Whitenoise:
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    STATICFILES_DIRS = [os.path.join(BASE_DIR, 'client', 'public', 'static')]
    

内容的提问来源于stack exchange,提问作者rokster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 05:30:52