2012-03-28 88 views
0

於是跑進這個問題,即媒體的網址不希望加載/工作至今我urls.py是建立像這樣Django的媒體不加載

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

我的設置。 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加載..

回答

0

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

假設您正在開發一個Django項目,使用其開發網絡 serv呃,當您嘗試在 瀏覽器加載頁面,你會得到這個異常:

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? 

在第一個,我 錯誤地分配URL模式是一個元組。第二,我正確使用django.conf.urls.defaults.patterns函數 。

+0

這很奇怪,因爲我的urls.py有以下URL模式=模式( '',( '^家/ $',master_page), ( '^頁腳/ $'), ) – Ayo 2012-03-28 21:15:07

0

我們這個代碼

urlpatterns += patterns('', 
    (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': 'media','show_indexes': True}), 
    ) 
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沒有任何關係。 「資產」目錄是您將放置所有項目範圍靜態資源的位置。您可以將您喜歡的任何名稱命名,但不能與MEDIA_ROOTSTATIC_ROOT相同。

還要注意:MEDIA_ROOT現在僅用於上傳,即通過FileField S和ImageField增補您的模型文件。 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將直接通過您的Web服務器,而不是Django的送達。

參見:https://docs.djangoproject.com/en/dev/howto/static-files/