【发布时间】:2020-09-24 05:17:17
【问题描述】:
所以我在设置下设置了我的静态网址:
settings.py
STATIC_URL = '/static/'
if DEBUG or not DEBUG:
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'tabular', 'templates'),
os.path.join(BASE_DIR, 'common'),
)
那么这里是我的静态文件文件夹路径
我有一个带有 logo.png 和 step1.png-step4.png 的网页。由于某些奇怪的原因,当我在部署中运行时,它正确获取 logo.png,但不是 step1.png-step4.png。
这里是html代码。
<div id="wrapper">
<div id="container">
<img style="padding: 1em;" src="{% static 'images/logo.png' %}" />
<form
class="form-horizontal"
enctype="multipart/form-data"
id="data_upload"
method="POST"
>
{% csrf_token %}
<div class="input-group mb-3">
<div class="custom-file">
<input
accept=".csv"
class="custom-file-input"
id="file_input"
name="file"
type="file"
/>
<label
aria-describedby="inputGroupFileAddon02"
class="custom-file-label"
for="inputGroupFile02"
id="submit_label"
>Upload CSV</label
>
</div>
<div class="input-group-append">
<button
class="input-group-text btn"
id="upload_button"
type="submit"
disabled
>
Upload
</button>
</div>
</div>
<div id="progress_div" class="progress" style="visibility: hidden;">
<div
id="progress_bar"
class="progress-bar"
role="progressbar"
style="width: 0%;"
aria-valuenow="25"
aria-valuemin="0"
aria-valuemax="100"
></div>
</div>
<br />
<div
id="spinner"
class="d-flex justify-content-center"
style="visibility: hidden;"
>
<div class="spinner-border text-primary" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</form>
</div>
</div>
<div
class="modal fade"
id="my_modal"
tabindex="-1"
role="dialog"
data-target="#my_modal"
aria-labelledby="exampleModalLabel"
aria-hidden="true"
>
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="modal_title">Modal title</h5>
<button
type="button"
class="close"
data-dismiss="modal"
aria-label="Close"
>
<span aria-hidden="true">×</span>
</button>
</div>
<div id="modal_body" class="modal-body"></div>
</div>
</div>
</div>
<div
class="modal fade"
id="how_to_modal"
tabindex="-1"
role="dialog"
data-target="#how_to_modal"
aria-hidden="true"
>
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="modal_title">How To</h5>
<button
type="button"
class="close"
data-dismiss="modal"
aria-label="Close"
>
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div
id="carouselExampleCaptions"
class="carousel slide"
data-ride="carousel"
>
<ol class="carousel-indicators" style="color: black;">
<li
data-target="#carouselExampleCaptions"
data-slide-to="0"
class="active"
></li>
<li data-target="#carouselExampleCaptions" data-slide-to="1"></li>
<li data-target="#carouselExampleCaptions" data-slide-to="2"></li>
<li data-target="#carouselExampleCaptions" data-slide-to="3"></li>
</ol>
<div class="carousel-inner">
<div class="carousel-item active">
<img
src="{% static 'imgs/step1.png' %}"
class="d-block w-100"
alt="..."
/>
</div>
<div class="carousel-item">
<img
src="{% static 'imgs/step2.png' %}"
class="d-block w-100"
alt="..."
/>
</div>
<div class="carousel-item">
<img
src="{% static 'imgs/step3.png' %}"
class="d-block w-100"
alt="..."
/>
</div>
<div class="carousel-item">
<img
src="{% static 'imgs/step4.png' %}"
class="d-block w-100"
alt="..."
/>
</div>
</div>
<a
class="carousel-control-prev"
href="#carouselExampleCaptions"
role="button"
data-slide="prev"
>
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a
class="carousel-control-next"
href="#carouselExampleCaptions"
role="button"
data-slide="next"
>
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
</div>
</div>
</div>
</div>
问题
这是 Google Chrome 开发人员中控制台打印的内容
GET https://blackboxml.cs.ubc.ca/static/imgs/step1.png 404 (Not Found)
GET https://blackboxml.cs.ubc.ca/static/imgs/step2.png 404 (Not Found)
GET https://blackboxml.cs.ubc.ca/static/imgs/step3.png 404 (Not Found)
GET https://blackboxml.cs.ubc.ca/static/imgs/step4.png 404 (Not Found)
当我以调试模式在我的个人窗口上运行此程序时,图像可以正常显示。另一个奇怪的事情是 html 的 css 在同一个文件夹中,但是可以正确加载但不是 pngs。
ls -l
-rw-r----- 1 virtuecc fwood 52176 Jun 4 16:27 step1.png
-rw-r----- 1 virtuecc fwood 32364 Jun 4 16:27 step2.png
-rw-r----- 1 virtuecc fwood 38267 Jun 4 16:27 step3.png
-rw-r----- 1 virtuecc fwood 49833 Jun 4 16:27 step4.png
其他文件
-rw-r----- 1 virtuecc fwood 9727 May 28 15:30 logo.png
我的尝试
- 我将所有 png 文件放在同一个文件夹“common/images”中,但仍然只有 logo.png 成功获取。
- 我还被告知运行命令“python manage.py collectstatic”应该可以解决这个问题。我从“https://www.youtube.com/watch?v=m0zEz_qdPLY”得到这个提示
规格
- Web 服务器是 Ubuntu
- Django 3.0.7
- Python 3.6.9
谁能告诉我为什么会这样?最终目标只是在部署期间为网站提供静态数据,如果有更好的方法可以做到这一点,我也愿意接受建议。
【问题讨论】:
-
您的 imgs 目录是模板目录的子目录,但您在 HTML 中的路径不包括模板目录。
-
它不应该要求这样做,因为父目录是静态的。据我所知,当您添加静态路径时,它充当包含所有静态文件的文件夹。此外,当我在我的个人窗口上调试时运行它而不是在开发中时,它们加载得很好。
-
@Roy2012 是的,我做到了,这不是一个愚蠢的问题,而是一个非常合理的问题,人为错误通常是导致事情无法正常工作的原因。我希望在这种情况下,更多的是我不知道 Django 对人为错误的规则
-
还有一个问题 - 因为您将所有图像放在一个目录中,所以有些工作,有些不工作,也许这是一个部署问题?您是否验证了所有文件都进入了 prod。环境,有适当的权限等?
-
您介意对有效的图像运行相同的“ls -l”吗(在 images 和 img 目录下)?
标签: python django web-deployment