2009-09-07 4 views
3

J'essaie de créer une fonction d'aperçu. Je lis ce blog, Django Admin Preview, mais maintenant j'ai l'erreur suivante et je ne sais pas ce que cela signifie.Aperçu Django, TypeError: l'objet 'str' n'est pas appelable

Traceback (most recent call last): 

    File "/home/user/webapps/django/lib/python2.5/django/core/handlers/base.py", line 92, in get_response 
     response = callback(request, *callback_args, **callback_kwargs) 

    TypeError: 'str' object is not callable 

Je suis perdu ..

Edit:

Merci les gars/filles, voici mon view.py et url.py:

from diligencia.diligencias.views import preview 

    url(r'^admin/diligencias/diligencia/(?P<object_id>\d+)/preview/$','preview'), 
    (r'^admin/(.*)', admin.site.root), 

    from diligencia.diligencias.models import Diligencia 

    @staff_member_required 
    def preview(request, object_id): 
     return object_detail(request, object_id=object_id,queryset=Diligencia.objects.all(), template_object_name = 'diligencia_detail.html',) 
+0

Plus d'infos à ce sujet serait utile. Quel est votre contenu urls.py et vos vues? Pouvez-vous penser à quelque chose de pertinent qui pourrait causer l'exception? – Santi

Répondre

8

La signature de la fonction url dans un URLconf est comme ceci:

def url(regex, view, kwargs=None, name=None, prefix='') 

Vous utilisez des paramètres de position seulement , mais ne passent que regex, view et name. Alors Python pense que votre troisième paramètre est le dictionnaire kwargs, pas le nom.

Au lieu de cela, faites ceci:

url(r'^admin/diligencias/diligencia/(?P<object_id>\d+)/preview/$', name='preview'), 

pour passer le nom en kwarg de sorte que Python reconnaît correctement.

+0

Daniel Merci, avec un changement de litière fonctionne: url (r '^ admin/diligencias/diligencia/(? P \ d +)/preview/$', aperçu, name = 'aperçu'), – Asinox

2

Je soupçonnez que votre vue n'est pas une fonction. Assurez-vous que l'argument dans votre urls.py est une fonction qui prend un paramètre. Comme:

import default 

url(r'^s(?:ite)?/search$', default.search, name="search"), 

Et puis vous avez dans default.py

def search(request) : 
    # do stuff 
Questions connexes