[英]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.