无法在 django python 中提供诸如 css、js 之类的静态文件

Posted

技术标签:

【中文标题】无法在 django python 中提供诸如 css、js 之类的静态文件【英文标题】:Unable to serve static files like css, js in django python 【发布时间】:2013-02-11 11:27:42 【问题描述】:

我对@9​​87654321@ 很陌生,并且学习了很多天的教程,我已经开始使用 django 构建一个小型网站,并尝试通过在settings.py 文件中安排所有必要的设置来提供css 文件。但不幸的是,我的代码无法提供 css 文件,我的意思是提供 css 文件的概念不起作用。我搜索了很多并浏览了 django 主文档教程并根据它们进行了更改,但仍然无法正常工作,所以接近 SO 并将我的整个代码粘贴在下面

项目文件夹结构

 personnel_blog
      |____personnel_blog
      |____manage.py  |  
                      |____media
                      |____static
                      |       |____css
                      |             |____personnel_blog_hm.css 
                      |____template 
                      |        |____home_page.html
                      |____settings.py
                      |____urls.py
                      |____views.py
                      |____wsgi.py         

我的一些settings.py文件设置如下

settings.py

import os
PROJECT_DIR = os.path.abspath(os.path.dirname(__file__))
DEBUG = True
MEDIA_ROOT = os.path.join(PROJECT_DIR,'media')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(PROJECT_DIR,'static')
STATIC_URL = '/static/'

STATICFILES_DIRS = (
                    os.path.join(PROJECT_DIR,'static'),
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)
TEMPLATE_DIRS = (
                 os.path.join(PROJECT_DIR,'templates')
)
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',
)

urls.py

from django.conf.urls.defaults import *
from django.conf import settings
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
     url(r'^$', 'personnel_blog.views.home_page'),
     url(r'^admin/', include(admin.site.urls)),
)
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 ),

)

views.py

from django.shortcuts import render_to_response

def home_page(request):
    return render_to_response("home_page.html")

home_page.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
  <head>
    <link rel="stylesheet" href=" STATIC_URL css/personnel_blog_hm.css" type="text/css">
  </head>
  <body>
   <p>Hello !</p>
   <a href="/" target="_top">Home</a>
  </body> 
</html>  

personnel_blog_hm.css

body  background-color:green; 
p color:blue;background-color:green;padding-left:20px;

以上是我的代码,谁能告诉我 settigns.py 文件或其他 py 文件有什么问题?

以上代码是否需要做其他额外的设置?

所以任何人都可以调整我的代码并进行必要的更改,以便我继续前进并迈出网页设计的第一步..... :)

【问题讨论】:

设置保存在哪里? 你使用的django版本是什么? @arulmr:Django 版本 1.4.3 生成的 HTML 是什么样的? STATIC_URL 有值吗? 【参考方案1】:

settings.py试试。

PROJECT_DIR  = os.path.dirname(__file__)
...
MEDIA_ROOT = os.path.join(PROJECT_DIR,'media')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(PROJECT_DIR,'static')
STATIC_URL = '/static/'

我的settings.py 文件通常与静态目录位于同一目录中

【讨论】:

【参考方案2】:

base.html

% load static %

<link rel="stylesheet" href="% static 'css/personnel_blog_hm.css' %" type="text/css">

设置

PROJECT_DIR  = os.path.dirname(__file__) 

MEDIA_ROOT = os.path.join(PROJECT_DIR,'media')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(PROJECT_DIR,'static')
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(PROJECT_DIR, 'staticfiles'),
)

网址

from django.conf.urls.defaults import *
from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf.urls.static import static
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
     url(r'^$', 'personnel_blog.views.home_page'),
     url(r'^admin/', include(admin.site.urls)),
)+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += staticfiles_urlpatterns()

【讨论】:

异常类型:NameError 异常值:未定义名称“静态” 是的,现在导入后,我没有收到错误,但 css 不能正常工作 设置文件与我在上面的项目结构中提到的静态文件夹所在的目录相同,是的,我已经用你的代码编辑了 PROJECT_DIR 这是我的终端响应:Django 版本 1.4.3,使用设置 'personnel_blog.settings' 开发服务器正在运行 127.0.0.1:8000 使用 CONTROL-C 退出服务器。 [26/Feb/2013 11:39:59]“GET / HTTP/1.1”200 938 [26/Feb/2013 11:39:59]“GET /css/personnel_blog_hm.css HTTP/1.1”404 2334 [26/ 2013 年 2 月 11:40:00]“GET / HTTP/1.1”200 938 [2013 年 2 月 26 日 11:40:01]“GET /css/personnel_blog_hm.css HTTP/1.1”404 2334 是的,在将 Debug 值 false 更改为 true 后终于成功了,非常感谢您节省时间的支持【参考方案3】:

您的问题与此行有关:

return render_to_response("home_page.html")

Django 的模板引擎需要两件事才能正确呈现模板。

    模板名称 上下文变量

context variable 是一个键/值字典,列出了模板可用的所有变量。

render_to_response 快捷方式实际上接受 two different context variable parameters。

你都错过了。

没有这些变量,模板就没有任何可用的变量。所以你的 STATIC_URL 模板变量可能是空白的。

要纠正,试试这个:

from django.shortcuts import render_to_response
from django.template import RequestContext

def home_page(request):
    return render_to_response("home_page.html", , context_instance=RequestContext(request))

【讨论】:

:k 我已经尝试并使用上面的代码编辑了我的视图文件,结果仍然相同(css 不工作的主体颜色没有改变)。很抱歉,很多人都在试图帮助我,但这确实是一个奇怪的问题,它实际上不起作用并且让我感到沮丧,这个问题是否也会由于任何安装错误/问题而引起? 如果您已完成上述操作,请检查生成的 HTML 并确保 STATIC_URL 被正确替换。如果是,请查看在浏览器中访问 127.0.0.1:8000/static 时会发生什么。它会产生 500 错误吗? 这是 html 中的行 并响应页面未找到(404 ) 请求方法:GET 请求地址:localhost:8000/static 不,您使用网络浏览器访问时看到的 HTML。【参考方案4】:

尝试将您的 STATICFILES_DIRS 设置更改为

STATICFILES_DIRS = (
    os.path.join(PROJECT_DIR,'static'),
)

【讨论】:

是的,我已经尝试并粘贴了上面的代码,仍然无法工作,真的无法理解问题所在...... @shivakrishna 你能告诉我来自 url localhost:8000/static 的回复吗? 这是 localhost:8000/static 的结果----- 发生服务器错误。请联系管理员。

以上是关于无法在 django python 中提供诸如 css、js 之类的静态文件的主要内容,如果未能解决你的问题,请参考以下文章

Python 和 Django 博客示例项目

Django/Python“django.core.exceptions.ImproperlyConfigured:无法导入‘联系人’。检查‘...apps.contact.apps.ContactC

无法使用 Python 2.7 从 django 网站连接到 MySQL,但可以使用 Python 2.5

win7下,使用django运行django-admin.py无法创建网站

django运行django-admin.py无法创建网站

django 在python 3中提示 无法找到 MySQLDB