Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更多Django静态404问题-与余烬配对_Python_Django_Ember.js - Fatal编程技术网

Python 更多Django静态404问题-与余烬配对

Python 更多Django静态404问题-与余烬配对,python,django,ember.js,Python,Django,Ember.js,我看过很多关于Django静态文件问题的帖子。不幸的是,他们似乎都帮不了我。我的django管理css很好,但是静态文件给了我一个404错误。以下是我的问题的描述: 在settings.py中: STATIC_URL = '/static/' STATIC_ROOT = '/Users/me/develop/ember/myproj/static/' from os import pardir from os.path import abspath, dirname, join # Get

我看过很多关于Django静态文件问题的帖子。不幸的是,他们似乎都帮不了我。我的django管理css很好,但是静态文件给了我一个404错误。以下是我的问题的描述:

在settings.py中:

STATIC_URL = '/static/'
STATIC_ROOT = '/Users/me/develop/ember/myproj/static/'
from os import pardir
from os.path import abspath, dirname, join

# Get the root directory of our project    
BASE_DIR = abspath(join(dirname(__file__), pardir))

# Add our project static folder for discovery
STATICFILES_DIRS = (
    # /Users/me/develop/myproject/myproject/static/
    join(BASE_DIR, 'myproject', 'static'),
)
# /Users/me/develop/myproject/static/
STATIC_ROOT = join(BASE_DIR, 'static')
在URL.py中:

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
我的项目目录:

> static
  > myproj
    > app
      > templates
        > ember.hbs
    > img
      > test.jpg
在我的
ember.hbs
中,我引用了
test.jpg
,但是我得到了一个404错误。这很奇怪,因为我可以用:
file:///Users/me/develop/ember/proj/static/myproj/img/test.jpg

我不知道如何解决这个问题,我已经尝试使用这里提到的
STATICFILES\u DIRS
方法: 但似乎一切都不起作用

提前谢谢

更多信息:Django 1.8和Ember CLI。 我在
static
dir中主持ember项目。

我正在运行
python manage.py runserver
并在端口8000上运行django,同时运行
ember s
并在端口4200上运行应用程序。我正在使用CORS headers()来允许在开发时进行跨站点调用。

静态文件将在您创建的“应用程序”(在
已安装的应用程序中找到)或在
静态文件\u DIRS
中指定的其他目录中找到

假设我做到了:

django-admin.py启动项目myproject

然后:

cd myproject
./manage.py startapp myapp
mkdir myapp/static
mkdir myproject/static
会给你一个目录结构,看起来像

/Users/me/develop/myproject/
  > myapp/
      > migrations/
      > static/
      > __init__.py
      > admin.py
      > models.py
      > tests.py
      > views.py
  > myproject/
      > static/
      > __init__.py
      > settings.py
      > urls.py
      > wsgi.py
  > manage.py
然后在settings.py中将“myapp”添加到
已安装的应用程序中

在这种结构中,
myapp/static/
文件将由Django自动发现,因为它是一个安装了静态目录的应用程序。但是,
myproject/static/
文件不会被自动发现,因为“myproject”不在
INSTALLED\u APPS
中(而且不应该是)

这是因为默认的
STATICFILES\u FINDERS
设置,即:

STATICFILES_FINDERS = [
  'django.contrib.staticfiles.finders.AppDirectoriesFinder',
  'django.contrib.staticfiles.finders.FileSystemFinder',
]
第一个查找程序,
AppDirectoriesFinder
,扫描所有安装的
应用程序的目录,并发现它们可能包含的任何“静态”文件夹

第二个查找程序,
FileSystemFinder
,扫描您在
STATICFILES\u DIRS
中指定的额外目录,默认情况下,该目录为空列表

因此,如果您希望发现/Users/me/developer/myproject/myproject/static/中的那些文件(您可能会这样做),可以将其添加到settings.py中:

STATIC_URL = '/static/'
STATIC_ROOT = '/Users/me/develop/ember/myproj/static/'
from os import pardir
from os.path import abspath, dirname, join

# Get the root directory of our project    
BASE_DIR = abspath(join(dirname(__file__), pardir))

# Add our project static folder for discovery
STATICFILES_DIRS = (
    # /Users/me/develop/myproject/myproject/static/
    join(BASE_DIR, 'myproject', 'static'),
)
# /Users/me/develop/myproject/static/
STATIC_ROOT = join(BASE_DIR, 'static')
现在,所有这些都与
STATIC\u ROOT
分开,在这里,当您运行
/manage.py collectstatic
时,所有静态文件都被复制。对于刚开始的项目,这通常位于项目根文件夹:/Users/develop/me/myproject/static中/

因此,我们将在settings.py中添加:

STATIC_URL = '/static/'
STATIC_ROOT = '/Users/me/develop/ember/myproj/static/'
from os import pardir
from os.path import abspath, dirname, join

# Get the root directory of our project    
BASE_DIR = abspath(join(dirname(__file__), pardir))

# Add our project static folder for discovery
STATICFILES_DIRS = (
    # /Users/me/develop/myproject/myproject/static/
    join(BASE_DIR, 'myproject', 'static'),
)
# /Users/me/develop/myproject/static/
STATIC_ROOT = join(BASE_DIR, 'static')
但这只在生产中使用,它是一种将所有静态资产编译成单个点的方法,然后使用服务器(例如NGINX)指向/静态/指向它

在开发过程中,您可以完全跳过collectstatic,让Django动态地发现和服务您的静态资产。Django在
Django.contrib.staticfiles.views.service
中提供了一个“服务”视图来执行此操作

在您的URL.py中尝试以下操作:

from django.conf import settings
from django.conf.urls import include, url
from django.contrib import admin
from django.contrib.staticfiles.views import serve


admin.autodiscover()

urlpatterns = [
  url(r'^admin/', include(admin.site.urls)),
]

if settings.DEBUG:
    urlpatterns += [
      url(r'^static/(?P<path>.*)$', serve),
    ]
来自django.conf导入设置的

从django.conf.url导入包括
从django.contrib导入管理
从django.contrib.staticfiles.views导入服务
admin.autodiscover()
URL模式=[
url(r“^admin/”,包括(admin.site.url)),
]
如果设置为.DEBUG:
URL模式+=[
url(r'^static/(?P.*),serve),
]

在您的示例中,您要求Django提供来自
STATIC\u ROOT
的文件,这也很好,但要求您首先运行
/manage.py collectstatic
,并且每次您的静态资产发生更改时都会遇到麻烦。

Ember和Django确实不应该位于同一个项目中。它们是使用不同工具的完全不同的框架

将您的Django项目视为服务于API的后端应用程序。将您的Ember项目视为可能会使用您的API的许多客户机之一。其他可能包括移动应用程序、合作伙伴服务等

当我启动一个将使用Django和Ember的新项目时,我启动了一个名为“myproject”的Django项目:

另外,还有一个名为“myproject web”的余烬项目:

在开发中,我将在终端中打开两个选项卡

第一个选项卡:

cd myproject
./manage.py runserver
第二个选项卡:

cd myproject-web
ember serve
在生产中,我将有两个不同的服务器,一个位于app.myproject.com,用于Django应用程序,另一个位于myproject.com,用于Ember应用程序


稍后,我可能会在一个名为“myproject ios”的存储库中启动一个Swift项目,并启动一个名为“myproject android”的Java项目。你明白了。

为了将静态文件提供给django项目,你只需要将这些行添加到`settings.py

STATIC_URL = '/static/'
STATIC_PATH = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = (
    STATIC_PATH,
)
然后在项目的主要结构中,口述需要是

>Project_dir
>App_dir
>static_dir
>templates
>manage.py

将css、js和其他静态内容放入静态目录中

您是否在html中使用/static/myproj/img/test.jpg加载此文件?1)当django项目(从视图源获取完整路径)时,该test.jpg的URL是什么?2)您是否使用Apache或其他服务器运行django?是@cafebabe1991,我在我的ember.hbs中使用的正是这个。@KrishnaSunuwar 1)来源的url:“NetworkError:404 Not Found-”2)我正在运行django项目,并使用CORS Header()允许对我的开发环境进行跨服务器调用。dustin-就是那个url吗?或者我应该使用
路径指向
img
目录吗?我这样问是因为很不幸,它没有起到任何作用。PS-你的东西的超级粉丝!实际上,您的问题可能是将静态文件放在哪里。我会更新我的答案。谢谢dustin,如果有帮助的话,我已经在上面添加了更多信息。好的,我只是详细说明了更多