如何在django中使用静态文件夹来获取css和javascript?

时间:2014-10-30 13:02:55

标签: javascript python html css django

我是django框架的新手。我创建了简单的欢迎页面,我想在我的项目中包含css文件。我无法在项目中应用css文件。我得到的错误就像" NetworkError:404 NOT 找到 - /static/css/hai.css"

my project structure 这是我的项目结构

setting.py

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
STATIC_URL = '/static/'
TEMPLATE_DIRS=(
os.path.join(os.path.dirname(BASE_DIR),"static","templates"),
)
if DEBUG:
  MEDIA_URL='/media/'
  STATIC_ROOT=os.path.join(os.path.dirname(BASE_DIR),"static","static-only")
  MEDIA_ROOT=os.path.join(os.path.dirname(BASE_DIR),"static","media")
  STATICFILE_DIRS=(
  os.path.join(os.path.dirname(BASE_DIR),"static","static"),
  )

url.py

if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL,document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

base.html文件

<link href="/static/css/bootstrap.min.css" rel="stylesheet">

我尝试关注链接,但我无法应用css https://www.youtube.com/watch?v=8t80DMAAps8

3 个答案:

答案 0 :(得分:2)

Django在STATIC_ROOT访问的STATIC_URL中自动收集静态。把你的&#34;基地&#34;像项目包中的bootstrap一样的静态(项目包是一个带有 init .py)的目录simpleform > static > bootstrap > copy here all tree dirs from bootstrap package: css, fonts, js。并将您的应用程序静态存储在signup > static > also create css, js dirs

因此,如果hai.css是您在base.html中使用的基本css之一,请将其simpleform > static > css > hai.css

<强> settings.py

这就是你应该提供项目静态的方法:

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'simpleform/static'),
)

对于应用程序静态:

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

此外,您还设置了一个目录,其中django应存储收集的静态和上传的媒体(以及用于访问它们的网址)。例如,将其设置为src > staticsrc > media

STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

<强> simpleform.urls

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

        url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
        'document_root': settings.STATIC_ROOT}),
)

<强>模板

{% load staticfiles %}

<link href="{% static 'bootstrap/css/bootstrap.min.css' %}" rel="stylesheet" media="screen">
<link href="{% static 'css/hai.css' %}" rel="stylesheet" media="screen">

答案 1 :(得分:2)

我认为这只是一个拼写错误。你需要在S之后放一个STATICFILE因此看起来应该是这样的:

STATICFILES_DIRS=(
  os.path.join(os.path.dirname(BASE_DIR),"static","static"),
  )

希望这样做。

答案 2 :(得分:0)

尝试做一个像这样的简单文件

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
OUTER_DIR = os.path.dirname(BASE_DIR)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

STATIC_URL = '/static/'

TEMPLATE_DIRS=(
    os.path.join(OUTER_DIR, "static", "templates"),
)

MEDIA_URL='/media/'
STATIC_ROOT = os.path.join(OUTER_DIR, "static", "static-only")
MEDIA_ROOT = os.path.join(OUTER_DIR, "static", "media")

STATICFILE_DIRS=(
    os.path.join(OUTER_DIR, "static"),
)

然后,在您的代码中使用{% static %}模板标记。

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

测试一下
DEBUG = True
TEMPLATE_DEBUG = DEBUG

如果您关闭DEBUG,则需要添加

if not settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL,document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

当你现在拥有它时,它不会被打开。

templates目录不应该在static文件夹中。通常,templatesstatic所需的特定文件应该在您的Django项目中,而不是单独的。