django - 无法在 Cpanel 上正确部署 Django(静态部分)
问题描述
当项目部署在 Cpanel python 应用程序上时,我尝试了所有步骤和命令来启用静态部分,但我失败了。请帮帮我。提前致谢。已部署: 在 goDaddy 上的 Cpanel 上部署我的代码
我可以在本地打开每个选项卡,但在部署的选项卡上出现 404 错误。
- 视图.py
from django.shortcuts import render, redirect
from django.contrib import messages
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from .forms import ManuForm
def home(request):
if request.method == 'GET':
return render(request, 'manufacture_page/homepage.html', {'form': ManuForm()})
else:
try:
form = ManuForm(request.POST)
if form.is_valid():
form.save(commit=True)
messages.info(request, 'Thanks! Will contact you back.')
return redirect(request.META['HTTP_REFERER'])
else:
print("IN ERROR")
errmsg= str(form.errors)
print(errmsg)
if "Phone already exists" in errmsg:
errmsg="Error!! Entered Number already exists!"
elif "Enter a valid phone number" in errmsg:
errmsg="Error!! Enter number with country code. (e.g. +917529984220)."
else:
errmsg="Error!! Bad data passed in!"
messages.error(request,errmsg)
# return render(request.META['HTTP_REFERER'], 'homepage.html', {'form': ManuForm(), 'error': errmsg})
return redirect(request.META['HTTP_REFERER'], {'form': ManuForm(), 'error': errmsg})
return redirect(home)
except ValueError:
return render(request, 'manufacture_page/homepage.html', {'form': ManuForm(), 'error':'Bad data passed in!'})
def about(request):
return render(request, 'manufacture_page/about.html')
def services(request):
return render(request, 'manufacture_page/services.html')
- 设置.py
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = '2dh-pafar$e$te&(m)b^z&yif035l1q=gid!q%$*+#l6r*&%*x'
DEBUG = False
ALLOWED_HOSTS = ['prezotech.in']
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'manufacture_page',
'phonenumber_field',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'lable_manufacturer.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'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 = 'lable_manufacturer.wsgi.application'
# Database
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# Password validation
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/3.0/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/
STATICFILES_DIRS=[BASE_DIR+"/static"]
STATIC_URL = '/static/'
STATIC_ROOT= os.path.join(BASE_DIR, 'static')
- 网址.py
from django.contrib import admin
from django.urls import path
from manufacture_page import views
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home),
path('homepage.html', views.home),
path('about.html', views.about),
path('services.html', views.services),
path('homepage.html#newsletter', views.home),
]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
- 主页.html
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Bootstrap CSS -->
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp"
crossorigin="anonymous">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.8/css/solid.css" integrity="sha384-v2Tw72dyUXeU3y4aM2Y0tBJQkGfplr39mxZqlTBDUZAb9BGoC40+rdFCG0m10lXk" crossorigin="anonymous">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ekko-lightbox/5.3.0/ekko-lightbox.css" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="{% static "/manufacture_page/style.css" %}">
<link href="https://fonts.googleapis.com/css?family=Lato&display=swap" rel="stylesheet">
<link rel="icon" type="image/png" href="{% static "/manufacture_page/logo.png" %}">
<title>Label manufacturer</title>
</head>
<body>
<nav class="navbar navbar-expand-sm navbar-dark bg-dark fixed-top">
<div class="container">
<!-- logo -->
<a href="" class="navbar-brand">
<img src="https://i.ibb.co/523F1fP/poster5-20-12359-1.png" width="45" height="35">
</a>
<a href="" class="navbar-brand">Prezotech</a>
<a href="https://api.whatsapp.com/send?phone=917529984220" style="font-size:17px;color:grey">
<!-- Send Message</a>-->
<!-- <a href="whatsapp://send?text=Hello World!&phone=+917529984220">-->
<!-- <i class="fa fa-whatsapp style="font-size:22px;color:blue" " aria-hidden="true"></i>-->
Send Msg <i class="fa fa-whatsapp" style="font-size:23px;color:#25D366; "></i>
</a>
<button class="navbar-toggler" data-toggle="collapse" data-target="#navbarCollapse">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav ml-auto">
<li class="nav-item active">
<a href="homepage.html" class="nav-link">Home</a>
</li>
<li class="nav-item">
<a href="about.html" class="nav-link">About Us</a>
</li>
<li class="nav-item">
<a href="services.html" class="nav-link">Products & Services</a>
</li>
<li class="nav-item">
<a href = "#newsletter" class="nav-link">Connect with Us</a>
</li>
</ul>
</div>
</div>
</nav>
<!-- SHOWCASE SLIDER -->
<section id="showcase">
<div id="myCarousel" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
<li data-target="#myCarousel" data-slide-to="1"></li>
<li data-target="#myCarousel" data-slide-to="2"></li>
</ol>
<div class="carousel-inner">
<div class="carousel-item carousel-image-1 ">
<div class="container">
<div class="carousel-caption d-sm-block text-right mb-5 text-dark">
<h1 class="brown_bk"><span>Contact Us</span></h1>
<p class="lead"><span>
Phone Number:
General Query: +91 9990768844 <br>
Sales Team: +91 9990764567<br>
Manufacturing Team: +91 9990768876<br>
Technical Team: +91 9990768833
</span></p>
<a href="https://www.prezotech.com/enquiry.html" target="_blank" class="btn btn-danger btn-lg">Contact Details</a>
</div>
</div>
</div>
<div class="carousel-item carousel-image-2">
<div class="container">
<div class="carousel-caption d-sm-block mb-5">
<h1 class="brown_bk"><span>Reviews</span></h1>
<p class="lead"><span>We have the most satisfied customers.
Check out customers review in different sites.</span></p>
<a target="_blank" href="https://www.google.com/search?safe=active&tbm=lcl&sxsrf=ALeKk01Q1Rq0ZRY_DswG94FRSh3b8_7qFg%3A1591739597842&ei=zQTgXs_3Mt_S1fAP3OakmAo&q=prezotech+solutions+private+limited&oq=Prezotech+sol&gs_l=psy-ab.3.0.35i39k1l2j0.878.1332.0.2388.4.4.0.0.0.0.128.386.3j1.4.0....0...1c.1.64.psy-ab..0.4.386...0i30k1.0.a1stxb_bjpo#rlfi=hd:;si:17620352125786189722,l,CiNwcmV6b3RlY2ggc29sdXRpb25zIHByaXZhdGUgbGltaXRlZEjUysywg6uAgAhaWgojcHJlem90ZWNoIHNvbHV0aW9ucyBwcml2YXRlIGxpbWl0ZWQQABABEAIQAxgAGAEYAhgDIiNwcmV6b3RlY2ggc29sdXRpb25zIHByaXZhdGUgbGltaXRlZA;mv:[[28.633411,77.31693310000001],[28.629303200000003,77.31207959999999]]"
class="btn btn-primary btn-sm"> Google</a>
<a target="_blank" href="https://www.justdial.com/Delhi/Prezotech-Solutions-Pvt-Ltd-Near-Nexa-Maruti-Showroom-Ghazipur/011PXX11-XX11-171218141608-Q5M6_BZDET/reviews/page-20?xid=THVkaGlhbmEgV292ZW4gTGFiZWwgTWFudWZhY3R1cmVycyBMb2xheQ=="
class="btn btn-primary btn-sm"> JustDial</a>
<a target="_blank" href="https://www.indiamart.com/prezotech/testimonial.html"
class="btn btn-primary btn-sm"> IndiaMart</a>
<a target="_blank" href="https://www.facebook.com/Prezotech/reviews/?ref=page_internal"
class="btn btn-primary btn-sm"> Facebook</a>
</div>
</div>
</div>
<div class="carousel-item carousel-image-3 active">
<div class="container">
<div class="carousel-caption d-sm-block text-right mb-5">
<h1 class="brown_bk"><span>Prezotech Label Manufacturer</span></h1>
<p class="lead"><span>Leader in the field of label manufacturing and Barcode related solution provider.</span></p>
<a href="about.html" class="btn btn-success btn-lg">Learn More About Us</a>
</div>
</div>
</div>
</div>
<a href="#myCarousel" data-slide="prev" class="carousel-control-prev">
<span class="carousel-control-prev-icon"></span>
</a>
<a href="#myCarousel" data-slide="next" class="carousel-control-next">
<span class="carousel-control-next-icon"></span>
</a>
</div>
</section>
<!--HOME ICON SECTION -->
<section id="home-icons" class="py-5">
<div class="container">
<div class="row">
<div class="col-md-4 mb-4 text-center">
<i class="fas fa-handshake fa-3x mb-2"></i>
<h3><b>TRUST!</b></h3>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, veniam.</p>
</div>
<div class="col-md-4 mb-4 text-center">
<i class="fas fa-user-lock fa-3x mb-2"></i>
<h3><b>COMMITMENT!</b></h3>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, veniam.</p>
</div>
<div class="col-md-4 mb-4 text-center">
<i class="fas fa-thumbs-up fa-3x mb-2"></i>
<h3><b>QUALITY!</b></h3>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, veniam.</p>
</div>
</div>
</div>
</section>
<!-- HOME HEADING SECTION -->
<section id="home-heading" class="p-5">
<div class="dark-overlay">
<div class="row">
<div class="col">
<div class="container pt-5">
<h1>Our Motto: Customer First!</h1>
<p class="d-none d-md-block">
"Happy customers are your biggest advocates and can become your most successful sales team."
</p>
</div>
</div>
</div>
</div>
</section>
<!-- INFO SECTION -->
<section id="info" class="py-3">
<div class="container">
<div class="row">
<div class="col-md-6 align-self-center">
<h3>Our Team is Our Family!</h3>
<p>With a bunch of experienced team members and Japanese machines we deliver standard and on time
label with any size demanded.</p>
<a href="about.html" class="btn btn-outline-danger btn-lg">Learn More</a>
</div>
<div class="col-md-6">
<img src="{% static "/manufacture_page/label.gif" %}" alt="" class="img-fluid">
</div>
</div>
</div>
</section>
<!-- VIDEO PLAY -->
<section id="video-play">
<div class="dark-overlay">
<div class="row">
<div class="col">
<div class="container p-5">
<a href="#" class="video" data-video="https://www.youtube.com/embed/cafgEkr2wcc" data-toggle="modal" data-target="#videoModal">
<i class="fas fa-play fa-3x"></i>
</a>
<h1>See What We Do</h1>
</div>
</div>
</div>
</div>
</section>
<!-- PHOTO GALLERY -->
<section id="gallery" class="py-5">
<div class="container">
<h1 class="text-center">Photo Gallery</h1>
<p class="text-center">Check out our photos</p>
<div class="row mb-4">
<div class="col-md-4">
<a href="{% static "/manufacture_page/one.jpg" %}" data-toggle="lightbox" data-gallery="img-gallery" data-height="560"
data-width="560">
<img src="{% static "/manufacture_page/one.jpg" %}" alt="" class="img-fluid">
</a>
</div>
<div class="col-md-4">
<a href="{% static "/manufacture_page/two.png" %}" data-toggle="lightbox" data-gallery="img-gallery" data-height="561"
data-width="561">
<img src="{% static "/manufacture_page/two.png" %}" alt="" class="img-fluid">
</a>
</div>
<div class="col-md-4">
<a href="{% static "/manufacture_page/three.jpg" %}" data-toggle="lightbox" data-gallery="img-gallery" data-height="562"
data-width="562">
<img src="{% static "/manufacture_page/three.jpg" %}" alt="" class="img-fluid">
</a>
</div>
</div>
<div class="row mb-4">
<div class="col-md-4">
<a href="{% static "/manufacture_page/four.jpg" %}" data-toggle="lightbox" data-gallery="img-gallery" data-height="563"
data-width="563">
<img src="{% static "/manufacture_page/four.jpg" %}" alt="" class="img-fluid">
</a>
</div>
<div class="col-md-4">
<a href="{% static "/manufacture_page/five.png" %}" data-toggle="lightbox" data-gallery="img-gallery" data-height="564"
data-width="564">
<img src="{% static "/manufacture_page/five.png" %}" alt="" class="img-fluid">
</a>
</div>
<div class="col-md-4">
<a href="{% static "/manufacture_page/six.jpeg" %}" data-toggle="lightbox" data-gallery="img-gallery" data-height="565"
data-width="565">
<img src="{% static "/manufacture_page/six.jpeg" %}" alt="" class="img-fluid">
</a>
</div>
</div>
</div>
</section>
<!-- NEWSLETTER -->
<section id="newsletter" class="text-center p-5 bg-dark text-white">
<div class="container">
<div class="row">
<div class="col">
<div class ="newsletter1 {% if active_tab == 'newsletter1' %} active{% endif %}">
<label><h1>Get In Touch</h1></label>
<!-- <h2>{{ error }}</h2>-->
{% for message in messages %}
<div class="alert alert-success">
<a class="close" href="#" data-dismiss="alert">×</a>
<h6> {{ message }} </h6>
</div>
{% endfor %}
<form method="POST" class="form-inline justify-content-center">
{% csrf_token %}
<input type="text" name="name" class="form-control mb-2 mr-2" placeholder="Enter Name" id="name" required>
<input type="tel" name="phone" class="form-control mb-2 mr-2" placeholder="Enter Phone" id="phone" required>
<input type="email" name="email" class="form-control mb-2 mr-2" placeholder="Enter Email" id="email" >
<input type="text" name="query" class="form-control mb-2 mr-2" placeholder="Any Query?" id="query">
<button class="btn btn-primary mb-2" type="submit">Send</button>
</form>
</div>
<br>
<!-- Social media-->
<li class="nav-item ml-auto active">
<a href="https://www.prezotech.com/" class="nav-link" >
<input type="image" src="https://i.ibb.co/kchdgsK/poster5-23-205140-1.png" />
</a>
</li>
<li class="nav-item ml-auto">
<a href="https://www.instagram.com/prezotech/" class="nav-link"><i class="fab fa-instagram" style="font-size:32px;color:red"></i></a>
</li>
<li class="nav-item ml-auto">
<a href="https://www.youtube.com/channel/UCKwa5sBdl0_afSyGJTT4Nvg" class="nav-link"><i class="fab fa-youtube" style="font-size:32px;color:red" ></i></a>
</li>
<li class="nav-item ml-auto">
<a href="https://www.facebook.com/Prezotech" class="nav-link"><i class="fab fa-facebook-f" style="font-size:27px;color:blue" ></i></a>
</li>
<li class="nav-item ml-auto">
<a href="https://www.linkedin.com/company/prezotech/?originalSubdomain=in" class="nav-link"><i class="fa fa-linkedin" style="font-size:29px;color:blue" ></i></a>
</li>
<li class="nav-item ml-auto">
<a href="https://twitter.com/prezotechsol" class="nav-link"><i class="fa fa-twitter" style="font-size:29px;color:blue" ></i></a>
</li>
<li class="nav-item ml-auto">
<a href="http://prezotech.in/feedback" class="nav-link"><i class="fas fa-comment-dots" style="font-size:29px;color:purple" ></i></a>
</li>
</div>
</div>
</div>
</section>
<!-- FOOTER -->
<footer id="main-footer" class="text-center p-4">
<div class="container">
<div class="row">
<div class="col">
<p>Copyright ©
<span id="year"></span> Prezotech</p>
</div>
</div>
</div>
</footer>
<!-- VIDEO MODAL -->
<div class="modal fade" id="videoModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<button class="close" data-dismiss="modal">
<span>×</span>
</button>
<iframe src="" frameborder="0" height="350" width="100%" allowfullscreen></iframe>
</div>
</div>
</div>
</div>
<script src="http://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js" integrity="sha384-smHYKdLADwkXOn1EmN1qk/HfnUcbVRZyYmZ4qpPea6sjB/pTJ0euyQp0Mk8ck+5T"
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ekko-lightbox/5.3.0/ekko-lightbox.min.js"></script>
<script>
// Get the current year for the copyright
$('#year').text(new Date().getFullYear());
// Configure Slider
$('.carousel').carousel({
interval: 6000,
pause: 'hover'
});
// Lightbox Init
$(document).on('click', '[data-toggle="lightbox"]', function (event) {
event.preventDefault();
$(this).ekkoLightbox();
});
// Video Play
$(function () {
// Auto play modal video
$(".video").click(function () {
var theModal = $(this).data("target"),
videoSRC = $(this).attr("data-video"),
videoSRCauto = videoSRC + "?modestbranding=1&rel=0&controls=0&showinfo=0&html5=1&autoplay=1";
$(theModal + ' iframe').attr('src', videoSRCauto);
$(theModal + ' button.close').click(function () {
$(theModal + ' iframe').attr('src', videoSRC);
});
});
});
</script>
</body>
</html>
PS:我已经用过collectstatic
解决方案
运行此命令以构建所有静态文件:
python manage.py collectstatic
之后,将在项目根目录创建一个包含所有必需静态文件的静态文件夹。只需将该文件夹上传到 cPanel 并将 URL 粘贴回您的 Django 应用程序中。
推荐阅读
- python - pyinstaller制作exe文件后程序不起作用
- excel - 使用 excel 求解器构建 VRP 并列出路径
- javascript - React 中的多选需要使用什么事件
- python - 按钮按下只工作一次
- python - 如何将数据框 value_count 每个值映射到新列
- xml - 如何在 .bat 脚本中编辑 XML 中的值
- hadoop - 错误:无法设置数据节点进程 16536 的优先级(数据节点和名称节点守护程序未运行)
- django - Django Rest Framework - 高效的 API 设计
- python - FastAPI 上的 422 错误,但发送的数据是根据我使用的架构
- php - 执行php程序时发生错误