Donc, je commence juste à apprendre Django, et j'essaye de compléter l'un des exemples d'applications du livre. Je suis coincé maintenant sur la création d'URL DRY. Plus spécifiquement, je n'arrive pas à faire fonctionner mon processeur de contexte. Je crée mon processeur de contexte comme si:Problème avec le processeur de contexte de Django
from django.conf import settings
#from mysite.settings import ROOT_URL
def root_url_processor(request):
return {'ROOT_URL': settings.ROOT_URL}
et je placé ce fichier dans mon application, en particulier, monsite/PHOTOGALLERY/context_processors.py. Mon fichier settings.py à la racine de mon projet contient:
TEMPLATE_CONTEXT_PROCESSORS = ('mysite.context_processors',)
Lorsque je tente d'aller au ROOT_URL que j'ai également précisé dans mon settings.py, je reçois cette erreur:
TypeError à/galerie/
objet 'module' est pas appelable
/galerie/est le ROOT_URL de cette application particulière. Je me rends compte que perhpas cela pourrait signifier un conflit de nommage, mais je ne peux pas en trouver un. De plus, lorsque je commente la définition TEMPLATE_CONTEXT_PROCESSORS de settings.py, l'application est effectivement chargée, mais mes images n'apparaissent pas (probablement parce que mes templates ne connaissent pas ROOT_URL, non?). Quelqu'un a-t-il des idées sur ce que pourrait être le problème?
EDIT: Voici quelques informations sur mon settings.py dans le cas où il est d'usage:
ROOT_URLCONF = 'mysite.urls'
ROOT_URL = '/gallery/'
LOGIN_URL = ROOT_URL + 'login/'
MEDIA_URL = ROOT_URL + 'media/'
ADMIN_MEDIA_PREFIX = MEDIA_URL + 'admin/'
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)
TEMPLATE_CONTEXT_PROCESSORS = ('mysite.photogallery.context_processors',)
EDIT2: Je vais ajouter quelques informations sur mes fichiers URL. Essentiellement, j'ai une racine urls.py, un real_urls.py qui est également situé à la racine, et un urls.py qui existe dans l'application. Fondamentalement, root/urls.py cache ROOT_URL de real_urls.py, qui inclut ensuite urls.py de mon application.
racine/urls.py:
from django.conf.urls.defaults import *
#from mysite.settings import ROOT_URL
from django.conf import settings
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Example:
(r'^blog/', include('mysite.blog.urls')),
url(r'^%s' % settings.ROOT_URL[1:], include('mysite.real_urls')),
)
racine/real_urls.py:
from django.conf.urls.defaults import *
from django.contrib import admin
urlpatterns = patterns('', url(r'^admin/(.*)', admin.site.root),
url(r'^', include('mysite.photogallery.urls')),
)
racine/PHOTOGALLERY/urls.py (notez que celui-ci est sans doute pas à l'origine l'un des problèmes , mais je l'ajouter ici au cas où quelqu'un veut le voir).
from django.conf.urls.defaults import *
from mysite.photogallery.models import Item, Photo
urlpatterns = patterns('django.views.generic', url(r'^$', 'simple.direct_to_template', kwargs={'template': 'index.html', 'extra_context': {'item_list': lambda: Item.objects.all()}
},
name='index'), url(r'^items/$', 'list_detail.object_list', kwargs={'queryset': Item.objects.all(), 'template_name': 'items_list.html', 'allow_empty': True },
name='item_list'), url(r'^items/(?P<object_id>\d+)/$', 'list_detail.object_detail', kwargs={'queryset': Item.objects.all(), 'template_name': 'items_detail.html' }, name='item_detail'), url(r'^photos/(?P<object_id>\d+)/$', 'list_detail.object_detail', kwargs={'queryset': Photo.objects.all(), 'template_name': 'photos_detail.html' }, name='photo_detail'),)
Si vous l'appelez vraiment de cette façon, vous devriez également changer vos breaces réguliers dans l'instruction 'return' en bouclés pour éviter les erreurs d'analyse. – che
Woops, c'était une erreur de traduction en SO. J'ai corrigé le code pour correspondre à ce que j'ai réellement. – AlbertoPL