2011-11-17 3 views
0

Je suis nouveau sur Django. Je deviens fou en essayant de comprendre ce qui se passe avec les fichiers statiques (css et images).Django - Comportement étrange en utilisant des fichiers statiques

Le résumé du problème est le suivant ... lorsque j'utilise des vues statiques d'une application tierce (Haystack) je ne peux pas utiliser de fichiers statiques.

Mon projet ont cette structure de répertoire:

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) 

Lorsque j'utilise urlpatterns (urls.py) comme celui-ci fonctionne très bien:

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), 
) 

Voici l'activité du serveur:

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 

Lorsque j'utilise les vues statiques de 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), 
) 

Certains après la navigation fois que je reçois ceci:

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' 

Toute idée de ce qui devrait être la cause?

Cordialement,

+1

Cela n'a absolument rien à voir avec les fichiers statiques (que vous n'utilisez pas correctement de toute façon). Je pense que vous devez réviser votre question pour clarifier ce que vous essayez d'accomplir. –

+0

Merci pour votre réponse. Pouvez-vous me donner un indice sur le sujet du problème? Je suis très peu expérimenté avec Django. –

+0

Si vous utilisez apache essayez 'SetHandler none' sur le site_media directory –

Répondre

2

Je ne sais pas si cela va résoudre le problème, mais vos habitudes url regarder un peu confus. Chaque objet urlpatterns ne doit contenir qu'une seule chaîne prefix comme premier argument. Vous avez 'haystack.views' et plus tard ''.

Vous êtes passing callable objects instead of strings dans vos modèles d'URL, donc en utilisant la chaîne vide '' pour votre préfixe est bien.

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

Belle solution, je viens de passer mes yeux très vite et je n'ai pas vu le problème du préfixe. –

Questions connexes