部署在cPanel的Django生产环境URL报404,本地正常求排查
Django部署cPanel后URL跳转404问题
我通过cPanel在虚拟主机上部署了Django应用,首页加载正常(仅开发者控制台显示favicon 404错误),图片和样式均正常显示(图片存储于Google Cloud Bucket,CSS/JS引用自CDN)。但点击菜单选项时,所有URL均无法正常访问,页面显示“File not found”,开发者控制台/网络面板显示404错误,日志文件中无任何错误信息。
已尝试的解决方案
- 在settings中设置
DEBUG=True、TEMPLATE_DEBUG=True - 逐个及组合指定默认Django模板加载器
- 确认所有应用已添加至
INSTALLED_APPS - 执行
collectstatic并尝试将模板DIRS指向该静态文件夹 - 每次修改后重启cPanel中的Python应用并清除浏览器缓存
补充说明:最初使用whitenoise处理静态文件,改用CDN方案后注释了settings中的相关配置,但仍出现404错误。模板最初放置在项目级目录(project\templates、project\templates\app),后来复制到应用级目录(application\templates\application*.html),collectstatic也在STATIC_ROOT生成了副本。
相关代码片段
base.html
<li><a href="{% url 'about' %}">About Us</a></li> <li><a href="{% url 'programme:research' %}">Research</a></li> <li><a href="{% url 'programme:training' %}">Training</a></li>
项目根urls.py(ROOT_URLCONF = 'myproject.urls')
app_name = 'myproject' urlpatterns = [ path('admin/', admin.site.urls), path('', HomeView.as_view(), name='home'), path('about/', AboutView.as_view(), name='about'), path('programme/', include('programme.urls')), ]
programme应用urls.py
app_name = 'programme' urlpatterns = [ path('research', ResearchView.as_view(), name='research'), path('training', TrainingView.as_view(), name='training'), ]
people应用views.py
class HomeView(generic.TemplateView): template_name = "home.html" def get_context_data(self, **kwargs): ... return context class AboutView(generic.TemplateView): template_name = "about.html"
programme应用views.py
class ResearchView(generic.TemplateView): template_name = "programme/research.html" class TrainingView(generic.TemplateView): template_name = "programme/training.html"
settings.py
BASE_DIR = Path(__file__).resolve().parent.parent INSTALLED_APPS += [ 'people', 'programme', ] TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ os.path.join(BASE_DIR, 'templates'), # findMyWay("templates"), ], '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', ], 'loaders': [ 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', ], }, }, ] LOGIN_REDIRECT_URL = 'home' STATIC_URL = 'static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'templates'), os.path.join(BASE_DIR, 'static'), ]
内容的提问来源于stack exchange,提问作者Alliso
相关产品推荐
相关产品推荐

