django - 使用 django manage.py runserver 开发时如何使用远程静态文件服务器

标签 django django-staticfiles

背景:我使用 Django manage.py runserver 进行本地开发。我在已安装的应用程序中有 contrib.staticfiles,我在我的模板中使用了它的 {% static %} 模板标签。

我试图实现的目标:对于开发,我想使用独立服务器来提供静态文件,但使用 django 开发服务器来为 Django 应用程序提供服务。这样我就可以在我的计算机上本地访问该页面 http://127.0.0.1:8000 ,但所有静态文件都将从另一台计算机或本地主机上的不同服务器提供,如 settings.STATIC_URL 变量所定义。

问题:当我使用开发服务器时,settings.STATIC_URL 变量以某种方式被覆盖。所以我所有的静态文件都由本地 django 开发服务器提供,而不是我在 settings.STATIC_URL 中定义的。

解决方案:见下面丹尼尔的回答!

设置.py:

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
STATIC_URL = os.path.join('127.0.0.1:666', BASE_DIR, 'static/')

example_template.html:
{% load staticfiles %}
{% load bootstrap3 %}
{% bootstrap_css %}
{% bootstrap_javascript jquery=True%}
{% bootstrap_messages %}

{# Load MyApp CSS #}
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,700subset=greek-ext,vietnamese,cyrillic-ext,latin-ext' rel='stylesheet' type='text/css'>
<link href="{% static 'css/my_app.main.css' %}" rel="stylesheet">

使用浏览器时的页面源:
<link href="FULL_PATH_TO_BASE_DIR_HERE/static/css/my_app.main.css" rel="stylesheet">

但预计会看到:
<link href="127.0.0.1:666/FULL_PATH_TO_BASE_DIR_HERE/static/css/my_app.main.css" rel="stylesheet">

最佳答案

这与 Django 或 runserver 无关。这仅仅是因为您正在使用 os.path.join()加入域和路径;该函数不知道 URL,并且会假设由于 BASE_DIR 以前导斜杠开头,它应该规范化整个路径以从那里开始并忽略之前的任何内容:

>>> os.path.join('127.0.0.1', '/foo', 'static')
'/foo/static'

解决方案是双重的:不要使用 os.path.join在 URL 上,但更重要的是,不要在 STATIC_URL 中使用 BASE_DIR。静态文件所在的文件系统目录与它们所暴露的 URL 没有任何关系。您的 STATIC_URL 应该类似于“http://127.0.0.1:666/static/”。

关于django - 使用 django manage.py runserver 开发时如何使用远程静态文件服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37733137/

相关文章:

python - 获取Django管理站点以显示pdf

Django 管道缓存破坏不更新缓存文件/哈希

django - 静态文件 - 找不到页面

Django如何将Decimal对象传递给json

Django 表单,在 Meta 类中有多个 "Models"?

python - 一行命令清除 8000 开放端口,杀死后台运行的 django 开发服务器

Django CSRF 错误 : Only on local runserver

AWS Elastic Beanstalk 上的 django-rq 和 rqscheduler 部署

python - Django 可以找到我的静态文件,Pycharm 无法解析它们

python - Django 元素通过多个应用程序提供静态文件