django媒体没有加载

时间:2012-03-28 20:46:51

标签: python django media django-urls django-settings

所以第一次使用django并遇到这个问题,媒体网址不想加载/工作到目前为止我的urls.py设置如此

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

我的settings.py就像这样

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media')
MEDIA_URL = '/media/'
ADMIN_MEDIA_PREFIX = 'http:/localhost:8000/admin-media/'

我的html模板如此

<link rel="stylesheet" href="/media/css/template.css" type="text/css" />
<link rel="stylesheet" href="/media/css/nivo-slider.css" type="text/css" />
<script type="text/javascript" src="/media/js/jquery-1.4.3.min.js"></script>
<script type="text/javascript" src="/media/js/jquery.nivo.slider.pack.js"></script>

每当我输入http://localhost:8000/media/css/template.css时,我都会

AttributeError at /media/css/template.css/

'str' object has no attribute 'resolve'

并在我的django服务器中记录以下内容

    Traceback (most recent call last):

  File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 283, in run
    self.result = application(self.environ, self.start_response)

  File "C:\Python27\lib\site-packages\django\core\handlers\wsgi.py", line 272, in __call__
    response = self.get_response(request)

  File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 169, in get_response
    response = self.handle_uncaught_exception(request, resolver, sys.exc_info())

  File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 218, in handle_uncaught_exception
    return callback(request, **param_dict)

  File "C:\Python27\lib\site-packages\django\utils\decorators.py", line 93, in _wrapped_view
    response = view_func(request, *args, **kwargs)

  File "C:\Python27\lib\site-packages\django\views\defaults.py", line 30, in server_error
    t = loader.get_template(template_name) # You need to create a 500.html template.

  File "C:\Python27\lib\site-packages\django\template\loader.py", line 157, in get_template
    template, origin = find_template(template_name)

  File "C:\Python27\lib\site-packages\django\template\loader.py", line 138, in find_template
    raise TemplateDoesNotExist(name)

    TemplateDoesNotExist: 500.html

当我输入http://localhost:8000/home/我的页面加载但没有加载我的css或javascript时..

3 个答案:

答案 0 :(得分:1)

如果你是第一次使用Django,你应该使用1.4。如果您使用的是较小版本,请在继续前进之前进行升级。在旧版本的框架上开始一个新项目会让你迟到。

所以,鉴于Django 1.4。您需要以下内容(仅限以下内容):

PROJECT_ROOT = os.path.dirname(__file__)

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

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

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'assets'),
)

PROJECT_ROOT只是一个节省重复的便利变量;它与Django没有任何关系。您可以在“assets”目录中放置所有项目范围的静态资源。您可以为喜欢的任何名称命名,它不能与MEDIA_ROOTSTATIC_ROOT相同。

另请注意:MEDIA_ROOT现在仅适用于上传,即通过模型上的FileFieldImageField添加的文件。 STATIC_ROOT仅用于collectstatic管理命令的输出,您只能在生产中使用;你从来没有真正存储过任何东西。

如果您在开发中使用runserver,Django将自动为您提供所有静态资源。 只有在开发中使用其他网络服务器时,才需要将以下内容添加到urls.py

from django.contrib.staticfiles.urls import staticfiles_urlpatterns

# ... the rest of your URLconf goes here ...

urlpatterns += staticfiles_urlpatterns()

最后,为了在开发中为您的MEDIA_ROOT目录提供服务,请将以下内容添加到urls.py:

from django.conf import settings

# ... the rest of your URLconf goes here ...

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

在制作中,MEDIA_ROOTSTATIC_ROOT都将由您的网络服务器直接提供,而不是Django。

请参阅:https://docs.djangoproject.com/en/dev/howto/static-files/

答案 1 :(得分:0)

http://redsymbol.net/articles/django-attributeerror-str-object-no-attribute-resolve/

  

假设您正在使用其开发网络处理Django项目   服务器,当您尝试加载页面时,您会收到此异常   浏览器:

AttributeError: 'str' object has no attribute 'resolve'
     

这是因为   你忘了输入“模式”这个词。

     

具体来说,在某些url.py中,您输入了类似的内容:

urlpatterns = ('', (r'^$', direct_to_template, {'template':'a.html'}),

# ... when you should have typed this:

urlpatterns = patterns('', (r'^$', direct_to_template, {'template':'a.html'}),

# ... See the difference?
     

在第一个中,我是   错误地将urlpatterns指定为元组。在第二,我   正确使用django.conf.urls.defaults.patterns函数。

答案 2 :(得分:0)

我们这段代码

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