0

这个问题我已经有一段时间了,我一直在尝试将我的 CSS 文件到处移动并更改设置,甚至弄乱媒体 url 的东西,我不相信我现在应该这样做阅读其他问题。

我的 CSS 文件位于 /home/justin/test/static/ 目录中。我的模板位于 /test/templates 目录中。

我的设置是:

STATIC_ROOT = '/home/justin/test/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    '/home/justin/test/static/',
)

我的网址是:

urlpatterns = patterns('',

    url(r'^$', 'views.home'),

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

)

我的主模板中有这三个。

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

他们出来了:

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

第一个输出到正确的文件,但它不起作用。非常感谢任何帮助。谢谢你。

我的意见.py:

from django.shortcuts import render_to_response
def home(request):
    return render_to_response('index.html',{})

我的终端错误是:

[16/Aug/2013 21:00:21] "GET /static/style.css HTTP/1.1" 500 1729
4

5 回答 5

1

这里有一些提示可以帮助您解决这个问题。

首先,与MEDIA_用户上传到系统的文件有关;并STATIC_引用属于您的应用程序的文件。

STATIC_ROOT应该指向collectstatic命令将从所有应用程序中转储所有静态文件的文件系统路径。当您将应用程序部署到生产环境中时,您运行collectstatic(这将覆盖由 指向的目录中的所有STATIC_ROOT内容),然后将此目录的内容复制到映射到指向的urlSTATIC_URL位置。

总之:

  1. 如果您的应用程序需要任何静态文件(图像、javascript、css 等)static,请在您的应用程序目录(与您拥有的位置相同)中创建一个名为的目录,models.py然后在其中添加文件。

  2. STATIC_ROOT应该指向一个目录,所有图像、css、javascript等都将被collectstatic命令转储。这仅在您要将应用程序移动到生产服务器时使用。该collectstatic命令将抓取static您的应用程序中列出的所有目录中的所有文件INSTALLED_APPS(包括来自django.contrib管理界面的文件)并将它们转储到此目录中。然后,您将获取此目录并将其复制或移动到您的 Web 服务器。

  3. STATICFILES_DIRS是一个目录,应该存储不属于任何特定应用程序的任何静态文件。如果设置了这个位置,那么 django 也会在这里寻找静态文件。

  4. STATIC_URL= 在您的 Web 服务器中配置的 URL 路径,以指向其中所有文件所在STATIC_ROOT的位置。

  5. 标签将{% static %}始终指向STATIC_URL变量。为了使用这个标签,你必须{% load staticfiles %}任何使用这个标签的模板的顶部;即使模板继承自其中已经作为负载线的模板。

  6. urls.py除非您使用 django 来提供静态文件(您不应该这样做) ,否则您不需要任何花哨的东西。使用 Web 服务器处理静态文件。如果您正在运行DEBUG = True并使用runserver,则 django 将在开发过程中出于礼貌自动为您处理静态文件。

  7. 对于由各种设置控制的任何用户上传的文件MEDIA_*,您需要在开发过程中手动处理这些文件;为此,您可以在urs.py. 同样,请记住,这仅用于开发- 不要在生产中使用它:

    from django.conf import settings
    from django.conf.urls.static import static
    
     urlpatterns = patterns('',
            # ... the rest of your URLconf goes here ...
      )
      if settings.DEBUG:
           urlpatterns += static(settings.MEDIA_URL,
                                 document_root=settings.MEDIA_ROOT)
    

请阅读手册中的静态文件部分;从那里我总结了以上几点。

最后,在视图中使用方法时应该使用render快捷方式。这确保始终发送正确的请求上下文。

于 2013-08-17T06:29:24.937 回答
1

你需要传递你requestRequestContext观点

def home(request):
    return render_to_response('index.html', locals(), context_instance = RequestContext(request))

只有这样,您的会话数据才会传递到模板并{{ STATIC_URL }}起作用。

于 2013-08-17T05:52:04.817 回答
0

在开发模式下(这意味着DEBUG=True在 中settings.py),提供静态文件

只需将以下几行放入urls.py

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
# ... the rest of your URLconf here ...
urlpatterns += staticfiles_urlpatterns()

在生产模式下,你应该在 django 前面使用 nginx/apache 来提供静态文件。

参考:https ://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/

你的问题中有一行:

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

通常,settings.MEDIA_ROOT用于用户上传的文件,它与settings.STATIC_ROOT.

于 2013-08-17T06:47:51.393 回答
0

你必须在你的模板中使用这个标签({% load static from staticfiles %}):

{% load static from staticfiles %}
<link rel="stylesheet" type="text/css"  href="{% static 'style.css' %}" />
于 2013-08-17T04:30:04.423 回答
0

在您的网址中,您应该从STATIC_ROOTMEDIA_ROOT设置中提供服务

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

此外,您需要将 RequestContext 传递给您的视图,如其他答案中所述。

于 2013-08-17T05:56:39.140 回答