繁体   English   中英

Django 1.7-提供静态文件

[英]Django 1.7 - Serving static files

我正在遵循官方文档以提供静态文件,但是在开发控制台中收到错误404。 我正在使用“ django.contrib.staticfiles”,因此应该自动提供静态文件。 这是我的设置:

设置:

STATIC_ROOT = ''
STATIC_URL = '/static/'

模板标题:

{% load staticfiles %}
<link rel="stylesheet" href="{% static "css/app.css" %}">

目录树:

django_project
    \apps
    \static
        \css
            app.css
    \templates
        index.html

我可以在firefox控制台中看到我文件的路径是正确的:

在此处输入图片说明

因此,问题一定是Django不提供静态文件。 我找不到我想要的东西。 任何建议都值得欢迎。

解决方案:我在settings.py中缺少此行

STATICFILES_DIRS = (os.path.join(os.path.dirname(__file__),'static'),)

看起来它是强制性的,与TEMPLATE_DIRS相同。

当您运行collectstatic时,它将所有静态内容放入STATIC_ROOT指定的路径中。 检查部署到生产文档

如果您使用的是django服务器,请尝试检查{%static%}生成的路径...您可能会有一些斜杠或缺少某些内容。

检查您是否遵守所有要求 您需要在已安装的应用程序中拥有django.contrib.static文件,并且在主url文件中具有以下内容:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    # ... the rest of your URLconf goes here ...
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

那应该工作:)

settings.py

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'project', "static"),
)

settings.py中的context_processors示例:

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.static",
    'django.core.context_processors.request',
    "django.core.context_processors.tz",
    "django.contrib.messages.context_processors.messages",
)

settings.py中已安装应用程序的示例:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

urls.py:

from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
    urlpatterns + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

对于运行django-cms并遇到404错误(特别是您的所有静态文件的URL都以“ en-us”开头)的任何人,我发现可以采取以下步骤。

首先,请在您的urls.py文件中关闭模式匹配的国际化功能, 如下所示

urlpatterns = i18n_patterns('',
      url(r'^admin/', include(admin.site.urls)),
      url(r'^', include('cms.urls')),
)

相反,应为:

from django.conf.urls import patterns

urlpatterns = patterns('',
  url(r'^admin/', include(admin.site.urls)),
  url(r'^', include('cms.urls')),
)

导入很重要,因为django-cms的配置会删除从django.conf.urls导入的patterns

这解决了重定向问题,但仍然找不到我的静态文件。 我需要手动将静态网址添加到网址格式中,如下所示:

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include('cms.urls')),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

在那之后,静态文件按预期工作。

我确定这可能与我把我的配置作为Django的新手搞砸有关。 但是由于其他人可能也有同样的问题,因此我将其作为一种可能的解决方案,即使不理想。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM