moa*_*lee 11 python django django-staticfiles
我一直在打破这一整天,但无法弄清楚问题.它是在我将项目从一台机器复制到另一台机器后发生的.
Settings.py
STATIC_URL = '/static/'
STATIC_ROOT = 'staticfiles'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)
Run Code Online (Sandbox Code Playgroud)
在INSTALLED_APPS中也提到了'django.contrib.staticfiles'.
文件夹结构:
Django-Projects (root)
project
app
static
css
home.css
js
manage.py
Run Code Online (Sandbox Code Playgroud)
模板:
{% load staticfiles %}
<link rel="stylesheet" href="{% static 'css/home.css' %}">
Run Code Online (Sandbox Code Playgroud)
urls.py
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'', include('app.urls')),
)
Run Code Online (Sandbox Code Playgroud)
它在打开模板时在控制台中引发错误:
GET http://127.0.0.1:8000/static/css/home.css
Failed to load resource: the server responded with a status of 404 (NOT FOUND)
Run Code Online (Sandbox Code Playgroud)
这可能有什么问题?请帮帮我.非常感谢!
在您的settings.py中
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)
STATIC_URL = '/static/'
Run Code Online (Sandbox Code Playgroud)
然后在您的模板文件中:
<link rel="stylesheet" href="{{ STATIC_URL }}css/home.css">
Run Code Online (Sandbox Code Playgroud)
使用您显示的目录根结构,我认为上述设置应该有效.虽然没有测试过.如果有效,请告诉我.
设置DEBUG=True
并查看它是否有效..这意味着,django 将为您的静态文件提供服务,而不是 httpserver,因为您在本地运行该应用程序,因此在这种情况下它不存在。
Django 默认BASE_DIR
会为你搜索静态内容。但就你而言,你在初始项目之前改变了方式。因此,对于您的情况,您必须BASE_DIR
像这样更改您的..然后只有静态文件才能正确服务
BASE_DIR = os.path.dirname(os.path.abspath(__file__) + '../../../')
Run Code Online (Sandbox Code Playgroud)
更新:
我没有看到那个评论。!DEBUG = True
仅用于开发并且您设置为 False,因此 django 将用于STATIC_ROOT = 'staticfiles'
在生产环境上提供静态内容...谢谢