Python 如何在开发中为Django提供CSS?

Python 如何在开发中为Django提供CSS?,python,django,Python,Django,我查阅了所有的文档,但对我来说毫无意义。我运行了collectstatic,在我的应用程序和项目目录中设置了/static/目录,我在settings.py文件中添加了static_URL和static_ROOT(但我不知道如何知道它们是否设置正确),并且{{static_URL}}仍然没有呈现任何内容。仅仅把html和css连接起来似乎就太过分了 我想我被细节迷住了;有人能提供这个静态文件想法的高级分解吗?恐怕我可能对生产和开发设置有混合说明 更多信息:以下是my settings.py文件中

我查阅了所有的文档,但对我来说毫无意义。我运行了collectstatic,在我的应用程序和项目目录中设置了/static/目录,我在settings.py文件中添加了static_URL和static_ROOT(但我不知道如何知道它们是否设置正确),并且{{static_URL}}仍然没有呈现任何内容。仅仅把html和css连接起来似乎就太过分了

我想我被细节迷住了;有人能提供这个静态文件想法的高级分解吗?恐怕我可能对生产和开发设置有混合说明

更多信息:以下是my settings.py文件中的相关内容:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'django.contrib.staticfiles',
    'dashboard.base',
)

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

STATIC_ROOT = ''
STATIC_URL = '/static/'


STATICFILES_DIRS = (
    'C:/Users/Sean/Desktop/Work Items/dashboard/base/static/',
)
这是我试图在模板中使用的代码:

<link rel="stylesheet" href="{{ STATIC_URL }}css/960.css" />

嗯。我做了大家推荐的改变。以下是我的新URL.py:

from django.conf.urls.defaults import *
from base.views import show_project
from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
# Example:
# (r'^dashboard/', include('dashboard.foo.urls')),

# Uncomment the admin/doc line below to enable admin documentation:
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),

# Uncomment the next line to enable the admin:
(r'^admin/', include(admin.site.urls)),
('^show_project/$', show_project),
)

if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT, 'show_indexes': True }),
        url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT, 'show_indexes': True }))

urlpatterns += staticfiles_urlpatterns()
从django.conf.url.defaults导入*
从base.views导入显示项目
从django.conf导入设置
从django.contrib.staticfiles.url导入staticfiles\u urlpatterns
#取消注释下两行以启用管理员:
从django.contrib导入管理
admin.autodiscover()
urlpatterns=模式(“”,
#例如:
#(r“^dashboard/”,包括('dashboard.foo.url'),
#取消注释下面的admin/doc行以启用管理员文档:
#(r“^admin/doc/”,包括('django.contrib.admindocs.url'),
#取消注释下一行以启用管理员:
(r“^admin/”,包括(admin.site.url)),
(“^show_project/$”,show_project),
)
如果设置为.DEBUG:
urlpatterns+=模式(“”,
url(r'^media/(?P.*)','django.views.static.service',{'document\u root':settings.media\u root,'show\u index':True}),
url(r'^static/(?P.*)','django.views.static.service',{'document_root':settings.static_root',show_index':True})
urlpatterns+=静态文件\u urlpatterns()

我错过什么了吗?通常情况下,我的问题是CS专业人士认为理所当然的基本问题,但我错过了。

看一看。您需要定义
STATIC\u URL
STATICFILES\u DIRS
以让
django.contrib.STATICFILES
知道在哪里查找文件。

静态文件思想背后的思想是,您可以在每个应用程序的基础上分发与开发相关的媒体文件(css/js等),并允许静态文件应用程序从各个位置管理和收集所有这些资源

因此,您可以告诉静态文件应用程序在何处查找静态文件(通过设置STATICFILES\u DIRS)、复制到何处(static\u ROOT)以及访问它们的路径(static\u URL)。运行collectstatic时,它会搜索目录并将找到的所有文件复制到静态根目录中

这样做的好处是,您可以更精细地管理静态文件:

project/app1/static/css/ # These are css/js for a particular app
project/app2/static/css/
project/app3/static/css/
project/static/css # These might be general css/js for the whole project
static/ # This is where the collectstatic command will copy files to
收集后,您将拥有:

project/app1/static/css/
project/app2/static/css/
project/app3/static/css/
project/static/css

static/app1/css/
static/app2/css/
static/app3/css/
static/css/
当您将应用程序/站点放在生产服务器上时,您让Web服务器(apache、nginx)处理文件的服务,方法是告诉它直接在/static/或/media/上提供媒体文件,同时将所有其他请求传递给应用程序。但是,在开发时,让开发服务器为您完成这项工作更容易

要做到这一点,您必须在/static/(您的静态URL)下显式地告诉is服务器任何媒体请求。在URL.py中,放置以下内容(或类似内容)

来自django.conf导入设置的

...
如果设置为.DEBUG:
urlpatterns+=模式(“”,
url(r'^media/(?P.*)','django.views.static.service',{'document\u root':settings.media\u root,'show\u index':True}),
url(r'^static/(?P.*)','django.views.static.service',{'document_root':settings.static_root',show_index':True})

以下是我的设置方式。听起来您可能缺少静态上下文处理器

静态根目录和静态URL

在开发中使用的settings.py中:

STATIC_ROOT = ''
STATIC_URL = '/static/'
以及在我的生产服务器上使用的settings.py:

STATIC_URL = '//static.MYDOMAIN.com/'
STATIC_ROOT = '/home/USER/public_html/static.MYDOMAIN.com/'
因此,所有静态文件都位于
static/
中。在生产服务器上,
static/
中的所有这些文件被收集到
/home/USER/public\u html/static.MYDOMAIN.com/
中,它们由不同的web服务器(在我的例子中是nginx)而不是Django提供服务。换句话说,我的django应用程序(在Apache上运行)甚至从未在生产环境中接收到对静态资产的请求

上下文处理器

为了使模板具有可用的
STATIC\u URL
变量,您需要使用
django.core.context\u处理器.STATIC
上下文处理器,该处理器也在
settings.py
中定义:

TEMPLATE_CONTEXT_PROCESSORS = (
    # other context processors....
    'django.core.context_processors.static',
    # other context processors....
)
开发中的服务器静态资产

Django在生产中没有收到对静态资产的请求,然而,在开发中,我们只是让Django服务于我们的静态内容。我们在
urls.py
中使用
staticfiles\u urlpatterns
告诉Django为
static/*
的请求提供服务

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
# .... your url patterns are here ...
urlpatterns += staticfiles_urlpatterns()

我也有同样的问题,搜索了很多答案,但没有人给我正确的答案。 我想问题是你没有使用。 您应该将a作为模板的参数,如

c = RequestContext(request, {
    'foo': 'bar',
})
我认为:

return render_to_response('parts/test2.html', RequestContext(request, locals()))

正确的。事实上,这就是我现在要做的。但它不起作用。我使用的是正斜杠,路径从C:/开始。这是错的吗?顺便说一下,它们都被设置为相同的东西,因为我不知道哪一个实际设置了{{STATIC_URL}}}变量。两者似乎都不起作用。它们不应该是一样的。STATICFILES\u DIRS应该是文件当前所在的位置,STATIC\u ROOT应该是一个单独的文件夹,您希望在收集文件时在该文件夹中结束,STATIC\u URL应该是您在使用站点/appYeah时访问文件的路径,这也不起作用。它告诉我“在/show_项目中的名称错误/未定义名称‘设置’”谢谢!但还是一无所获。我刚刚粘贴了其他代码,我已经在那里了。也许我忘了什么?就像我
return render_to_response('parts/test2.html', RequestContext(request, locals()))