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



背景:我正在使用Django manage.py运行服务器进行本地开发。我在安装的应用程序中有contrib.staticfile,我在模板中使用它的{%static%}模板标记。

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

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

解决方案:请参阅下面Daniel的答案!

settings.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'

解决方案有两个:不要在URL上使用os.path.join,但更重要的是,不要在STATIC_URL中使用BASE_DIR。静态文件所在的文件系统目录与它们公开的URL无关。您的static_URL应该类似于"http://127.0.0.1:666/static/".

最新更新