2016-08-03 91 views
0

我目前生气Django(1.9)!最可悲的是'静态URL'是给我的问题。 '媒体网址'工作正常,没有问题,但静态网址给了一个巨大的头痛。Django静态URL错误,无法加载

在我settings_dev.py

import os 
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
PROJECT_PATH = os.path.abspath(os.path.dirname(__file__)) 
STATIC_ROOT = os.path.join(PROJECT_PATH,'../static/') 
STATIC_URL = '/static/' 

当我添加了以下标签:

{% load static from staticfiles %} 

    <script type="text/javascript" src="{% static 'datepicker/js/bootstrap-datepicker.js' %}"></script> 

JS文件将不会加载。当我检查我的源代码时,它会显示下面的链接。

<script type="text/javascript" src="/static/datepicker/js/bootstrap-datepicker.js"></script> 

,当我点击它我重定向到

http://127.0.0.1:8000/static/datepicker/js/bootstrap-datepicker.js 

和显示

Page not found (404) 
    Request Method: GET 
    Request URL: http://127.0.0.1:8000/static/datepicker/js/bootstrap- datepicker.js 

现在,我调整我的urls.py到

if settings_dev.DEBUG: 
    # static files (images, css, javascript, etc.) 
    urlpatterns += patterns('', 
     (r'^media/(?P<path>.*)$', 'django.views.static.serve', { 
    'document_root': settings_dev.MEDIA_ROOT, 'show_indexes': True}), 
     (r'^static/(?P<path>.*)$', 'django.views.static.serve', { 
    'document_root': settings_dev.STATIC_ROOT, 'show_indexes': True}), 
) 

然而,我仍然收到相同的错误!页面未找到问题。

项目目录

PROJECT NAME: Book/ 

SUB DIRECTORY: 
    media 
    static 
    Template 
    book 
    bookapp 
    manage.py (this is a file) 

我缺少什么?

+1

首先,您使用的任何其他服务器除了Python的Django开发服务器托管您的web应用程序,像** Apache或NGINX **?也就是说,你使用'python manage.py collectstatic'? –

+0

你也可以向我们展示你的根目录是什么样子的,以便看看static_url是否真的在静态文件的正确目录中搜索? –

+0

@AnkushRaghuvanshi我更新了问题 – YoYo

回答

2

好了把事情给你明确的。

STATIC_ROOT是当你想在另一台服务器上提供你的文件时所有你的静态数据被收集的目录,比如APACHE或NGINX,或者可能在Heroku左右。

如果不想只想在本地开发服务器上运行您的Web应用程序,则不需要python manage.py collectstatic,因此您不需要STATIC_ROOT。

所有你需要的是STATIC_URL和万一你有你的静态文件在其他位置,那么你也需要STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"),]

因此,您将在基本目录级别上有一个名为`static'的文件夹,其中django将查找您的静态文件。

如果您为STATIC_DIRSSTATIC_ROOT指定了相同的文件夹,则会自动出现错误。 Django不会允许你这样做,因为你在技术上试图为了两个不同的目的提供相同的目录。

进行了详细的说明,请参见本 - >Differences between STATICFILES_DIR, STATIC_ROOT and MEDIA_ROOT

+0

谢谢。如果是这样的话,我的STATIC_ROOT = os.path.join(PROJECT_PATH,'../static /')是正确的。它应该定位它。不需要STATIC_DIRS,因为我只有一个位置存储我的静态文件。此外,我还在开发服务器。 – YoYo

+0

仍然不知道为什么Django无法找到我的静态网址 – YoYo

+0

不..不对。 –

1
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"),] 

这条线是足够的服务项目static夹中的文件...你必须设置这个在你的urls.py

urlpatterns = [ 
    ... 
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 
+0

您是否尝试过我的解决方案? –

+0

STATIC_ROOT仅用于部署,这意味着生产服务器...请参阅此链接... https://docs.djangoproject.com/en/1.10/howto/static-files/#deployment –

+0

我收到此错误不正确配置: STATICFILES_DIRS设置不应包含STATIC_ROOT设置 – YoYo