django app中媒体文件夹中css文件的404错误

时间:2012-09-14 04:54:44

标签: python css django http-status-code-404

在我的django应用中,我已经设置了这些设置

settings.py
------------
MEDIA_ROOT = '/home/me/dev/python/django/myproject/myapp/media/'
MEDIA_URL = '/site_media/'

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

我在'/home/me/dev/python/django/myproject/myapp/media/css'文件夹中创建了一个css文件,并将其包含在模板中,如下所示

base.html
--------
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>my app</title>
<LINK REL=StyleSheet HREF="{{MEDIA_URL}}css/myappstyle.css" TYPE="text/css" MEDIA="screen, print"/>

home.html
---------
{% extends "mywebapp/base.html" %}>
{% block title %}{{block.super}}| Home {% endblock %}

{% block content %}
   {{block.super}}
   hi
{% endblock %}

然后我创建了一个视图,如下所示

def custom_render(request,context,template):
    req_context=RequestContext(request,context)
    return render_to_response(template,req_context)

def home(request,template_name,page_title):
    print 'home'
    return render_to_response(template_name,{'me':'myname'})

并设置其网址

myapp.urls
--------

urlpatterns=patterns('',
  url(r'^$','myapp.views.home',
      {
         'template_name':'mywebapp/home.html',
         'page_title':'Home'
       },
      name='home'),

当我提供网址时

http://127.0.0.1:8000/myapp/

网页被渲染,但css不是。控制台输出显示404错误

[14/Sep/2012 10:02:50] "GET /myapp/ HTTP/1.1" 200 547
[14/Sep/2012 10:02:50] "GET /myapp/css/myappstyle.css HTTP/1.1" 404 2514

但是,当我提供网址时,

http://127.0.0.1:8000/site_media/css/myappstyle.css

我可以毫无问题地看到css文件的内容。

为什么会这样?有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

在呈现RequestContext()视图的响应时,您需要使用home(正如您对custom_render视图所做的那样)。

否则{{MEDIA_URL}}将为空,这将导致404错误。

答案 1 :(得分:1)

此外,您可以使用direct_to_template代替render_to_response。使用它,您不必使用RequestContext()

from django.views.generic.simple import direct_to_template

def some_view(request):
    # ...
    return direct_to_template(request, template_name, params_dict)

答案 2 :(得分:0)

这是静态文件,需要使用

<LINK REL=StyleSheet HREF="{{ STATIC_URL }}css/myappstyle.css" TYPE="text/css" MEDIA="screen, print"/>

然后检查DEBUG = True