【问题标题】:How to use a remote static file server while developing with django manage.py runserver使用 django manage.py runserver 开发时如何使用远程静态文件服务器
【发布时间】:2016-10-10 12:43:27
【问题描述】:

背景:我正在使用 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 中定义的。

解决方案:请参阅下面丹尼尔的答案!

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">

【问题讨论】:

  • 不,除非你自己做,否则 URL 不会被覆盖。请显示您的设置文件的相关部分,以及您使用该值的视图/模板。
  • 我希望这包含必要的行!我只使用 {% static %} 标记从我的模板访问静态文件(我没有从我的视图中访问它们)。
  • 您是否尝试从您的INSTALLED_APPS 中删除django.contrib.staticfiles

标签: django django-staticfiles


【解决方案1】:

这与 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/”。

【讨论】:

  • 哇,很高兴我在这里问了这个问题!我会花很长时间才能弄清楚这一点!我出于某种原因认为我 os.path.join 正在做 os.sep.join 所做的事情。您指出到文件系统的 URL 映射不是 1:1 的事情也很有帮助。在这里,我从本地主机上的根目录开始为我的整个文件系统提供服务,这样我就可以使用文件夹的完整绝对路径,我认为它可以帮助我解决这个问题。绝对不会在生产中这样做! :) 谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-06-12
  • 2012-06-13
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
  • 2016-03-18
相关资源
最近更新 更多