【问题标题】:STATIC_URL Not Working on Django 1.5STATIC_URL 不适用于 Django 1.5
【发布时间】:2013-11-09 01:18:06
【问题描述】:

我无法加载 .css 和 .js 文件。这是我在服务器上得到的输出:

[29/Oct/2013 11:33:26]“GET /static/srt/css/django-admin-widgets.css HTTP/1.1”404 1700

[29/Oct/2013 11:33:26]“GET /static/srt/js/django-admin.multiselect.js HTTP/1.1”404 1706

settings.py:

MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(PROJECT_DIR, 'staticfiles'),
)

urls.py:

urlpatterns = patterns('',
# Examples:
# url(r'^$', 'srt_project.views.home', name='home'),
# url(r'^srt_project/', include('srt_project.foo.urls')),

# Uncomment the admin/doc line below to enable admin documentation:
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
url(r'^accounts/', include('registration.backends.default.urls')),
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
# url(r'^accounts/', include('registration.urls')),

url(r'^srt/', include('srt.urls', app_name='srt')),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += staticfiles_urlpatterns()

site_base.html

{% load static from staticfiles%}
<!DOCTYPE html>
<html>
<head>
    <title>Status Reporting Tool</title>
    <link rel="stylesheet" type="text/css" href="{% static 'srt/css/django-admin-widgets.css' %}" />
    <script type="text/javascript" src="{% static 'srt/js/django-admin.multiselect.js' %}"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
    <script>
        jQuery.each($("select[multiple]"), function () {  
        // "Locations" can be any label you want  
        SelectFilter.init(this.id, "Viewers", 0, "/static/srt/");  
        });  
    </script>

目录结构:

.---srt_project
|   manage.py
|                   
+---srt
|   |   admin.py
|   |   forms.py
|   |   models.py
|   |   tables.py
|   |   tests.py
|   |   urls.py
|   |   views.py
|   |   __init__.py
|               
\---srt_project
    |   settings.py
    |   srt_project.sqlite
    |   urls.py
    |   wsgi.py
    |   __init__.py
    |   
    \---static
        \---srt
            +---css
            |       django-admin-widgets.css
            |       
            \---js
                    django-admin.multiselect.js

【问题讨论】:

  • 您的网络服务器应该处理静态文件。你可以在你的 htacess 或 server conf 中放置一个别名来为你的静态文件提供服务。
  • @Jingo 我认为这不是问题所在。我在 DEBUG=True 的开发服务器上运行它。来自文档:“除了这些配置步骤,您还需要实际提供静态文件。在开发过程中,如果您使用 runserver 并且 DEBUG 设置为 True,这将自动完成(参见 django.contrib.staticfiles.views .serve())。这种方法效率极低,可能不安全,因此不适合生产。”
  • 这是我的观点,如果您使用 runserver 命令(这就是我正在做的),开发服务器会自动为您提供文件。所以我不太确定你在暗示什么,你能详细说明一下吗?

标签: python django django-staticfiles


【解决方案1】:

以下是要检查的事项列表:

  • 您是否将django.contrib.staticfiles 包含在INSTALLED_APPS 中?
  • 您是否将srt 包含在INSTALLED_APPS 中?
  • DEBUG = True 还是False?如果是False,那么staticfiles_urlpatterns 将不起作用。
  • (部署中)你运行python manage.py collectstatic了吗?

【讨论】:

  • 谢谢西蒙。 django.contrib.staticfiles 和 srt 包含在 INSTALLED_APPS 中。调试 = 真。尚未部署,在本地主机上作为开发运行。必须在内部 srt_project 文件夹中创建一个空文件夹 staticfiles 才能运行 collectstatic。不知道那做了什么,复制了一堆文件。我认为这在开发过程中不会有任何区别,但不确定。
【解决方案2】:

好的,我在 .js 和 .css 文件上得到了 304,所以看起来我已经修复了它。我只需要在我的内部 srt_project 目录中将我的文件夹名称从“static”更改为“staticfiles”。虽然这对我来说没有任何意义,但如果 'static' 现在是 'staticfiles':

[29/Oct/2013 12:50:48] "GET /static/srt/css/django-admin-widgets.css HTTP/1.1" 304 0
[29/Oct/2013 12:50:48] "GET /static/srt/js/django-admin.multiselect.js HTTP/1.1" 304 0

谁能解释一下?

【讨论】:

  • 因为你运行了collectstatic,它就是这样做的:将所有内容复制到静态文件中。但是,您说得对,您在开发中不需要这样做。
猜你喜欢
  • 2013-02-17
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多