2011-11-17 46 views
0

我是Django的新手。我瘋了,試圖瞭解靜態文件(CSS和圖像)發生了什麼。Django - 使用靜態文件的奇怪行爲

問題的簡歷如下...當我使用第三方應用程序(Haystack)的靜態視圖時,我無法使用靜態文件。

我的項目有這樣的目錄結構:

1001empbr (name of the folder for the project) 
    | 
    |------ 1001emp (name of the django project) 
       | 
       |------ 1001empbr (name of my App) 
       |------ site_media (folder with static files CSS/JPG/GIF) 
       |------ templates (folder with the templates) 

當我使用URL模式(urls.py)這樣的偉大工程:

import os.path # Para poder suportar static files 
from django.conf.urls.defaults import patterns, include, url 
from emp1001br.views import * 
from emp1001 import settings 
from haystack.forms import FacetedSearchForm 
from haystack.query import SearchQuerySet 
from haystack.views import FacetedSearchView 
import datetime 

urlpatterns = patterns(
    #'haystack.views',     
    #url(r'^resultados/$', FacetedSearchView(template='emp1001br/pgresultados.html', searchqueryset=sqs, form_class=FacetedSearchForm), name='haystack_search'),     
    '', 
    (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}), # To support static files 
    url(r'^$', main_page), 
    (r'^iframe/$', i_frame), 
) 

這裏是服務器的活動:

0 errors found 
Django version 1.3.1, using settings 'emp1001.settings' 
Development server is running at http://127.0.0.1:8000/ 
Quit the server with CONTROL-C. 
[17/Nov/2011 10:15:30] "GET/HTTP/1.1" 200 2816 
[17/Nov/2011 10:15:30] "GET /site_media/estilos.css HTTP/1.1" 200 6894 
[17/Nov/2011 10:15:30] "GET /site_media/pgiframe.css HTTP/1.1" 200 1345 
[17/Nov/2011 10:15:31] "GET /site_media/logo1.gif HTTP/1.1" 200 4358 
[17/Nov/2011 10:15:31] "GET /site_media/fundo1.jpg HTTP/1.1" 304 0 
[17/Nov/2011 10:15:31] "GET /site_media/form.gif HTTP/1.1" 304 0 
[17/Nov/2011 10:16:20] "GET /iframe/ HTTP/1.1" 200 1874 
[17/Nov/2011 10:16:20] "GET /site_media/close.gif HTTP/1.1" 200 124 
[17/Nov/2011 10:16:20] "GET /site_media/banner.jpg HTTP/1.1" 200 12538 
[17/Nov/2011 10:16:20] "GET /site_media/logo2.gif HTTP/1.1" 200 3418 
[17/Nov/2011 10:16:20] "GET /site_media/imgs/fundo1.jpg HTTP/1.1" 404 1753 
[17/Nov/2011 11:20:06] "GET/HTTP/1.1" 200 2816 

當我使用Haystack的靜態視圖時:

import os.path # Para poder suportar static files 
from django.conf.urls.defaults import patterns, include, url 
from emp1001br.views import * 
from emp1001 import settings 
from haystack.forms import FacetedSearchForm 
from haystack.query import SearchQuerySet 
from haystack.views import FacetedSearchView 
import datetime 

urlpatterns = patterns(
    'haystack.views',     
    url(r'^resultados/$', FacetedSearchView(template='emp1001br/pgresultados.html', searchqueryset=sqs, form_class=FacetedSearchForm), name='haystack_search'),     
    '', 
    (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}), # To support static files 
    url(r'^$', main_page), 
    (r'^iframe/$', i_frame), 
) 

一些時間瀏覽後我得到這個:

0 errors found 
Django version 1.3.1, using settings 'emp1001.settings' 
Development server is running at http://127.0.0.1:8000/ 
Quit the server with CONTROL-C. 
[17/Nov/2011 11:50:25] "GET /resultados/?q=m%C3%A9dico HTTP/1.1" 200 10634 
[17/Nov/2011 11:50:25] "GET /site_media/estilos.css HTTP/1.1" 500 85526 
[17/Nov/2011 11:50:26] "GET /site_media/pgiframe.css HTTP/1.1" 500 85548 
[17/Nov/2011 11:50:26] "GET /site_media/logo2.gif HTTP/1.1" 500 85067 
[17/Nov/2011 11:50:27] "GET /site_media/banner.jpg HTTP/1.1" 500 85315 
Unhandled exception in thread started by <bound method Command.inner_run of <django.contrib.staticfiles.management.commands.runserver.Command object at 0x1225ed0>> 
Error in sys.excepthook: 
Traceback (most recent call last): 
    File "/usr/lib/python2.6/site-packages/abrt_exception_handler.py", line 147, in <lambda> 
    sys.excepthook = lambda etype, value, tb: handleMyException((etype, value, tb)) 
TypeError: 'NoneType' object is not callable 

Original exception was: 
Traceback (most recent call last): 
    File "/home/andre/python_virtualenv/lib/python2.6/site-packages/django/core/management/commands/runserver.py", line 107, in inner_run 
    run(self.addr, int(self.port), handler, ipv6=self.use_ipv6) 
    File "/home/andre/python_virtualenv/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 696, in run 
    httpd.serve_forever() 
    File "/usr/lib64/python2.6/SocketServer.py", line 224, in serve_forever 
    r, w, e = select.select([self], [], [], poll_interval) 
AttributeError: 'NoneType' object has no attribute 'select' 

什麼應該導致此任何線索?

最好的問候,

+1

這與靜態文件完全沒有關係(反正你沒有正確使用)。我認爲你需要修改你的問題,以便更清楚你想要完成什麼。 –

+0

感謝您的回覆。你能給我一些關於這個問題的線索嗎?我很少與Django合作。 –

+0

如果您使用的是Apache,請在site_media目錄下嘗試'SetHandler none' –

回答

2

我不知道這是否會解決這個問題,但你的URL模式看起來有點困惑。每個urlpatterns對象應該只有一個prefix字符串作爲其第一個參數。您有'haystack.views',然後是''

你的passing callable objects instead of strings在你的url模式,所以使用空字符串''爲你的前綴是好的。

urlpatterns = patterns(
    '',     
    url(r'^resultados/$', FacetedSearchView(template='emp1001br/pgresultados.html', searchqueryset=sqs, form_class=FacetedSearchForm), name='haystack_search'),     
    (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}), # To support static files 
    url(r'^$', main_page), 
    (r'^iframe/$', i_frame), 
) 
+0

好的解決方案,我只是非常快速地通過我的眼睛,並沒有看到前綴問題。 –