'str' object is not callable,how to deal?
Question: when I'm trying to run my python-django app, the error says: 'str' object is
not callable  
I've tried the solution here but not worked for me: [TypeError: 'str' object
is not callable
(Python)](http://stackoverflow.com/questions/6039605/typeerror-str-object-is-
not-callable-python)

I'm trying to run django book sample here:  
[TypeError: 'str' object is not callable
(Python)](http://stackoverflow.com/questions/6039605/typeerror-str-object-is-
not-callable-python)

this is my view.py:

    
    
    # Create your views here.
    from django.http import HttpResponse
    import datetime
    
    def current_time(request):
        now = datetime.datetime.now()
        html = "<html><head></head><body>%s</body></html>" % str(now)
        return HttpResponse(html)
    
    def hello(request,name):
        return HttpResponse("Hello django")
    
    def what(request):
        return HttpResponse("what's the problem django?")
    

this is urls.py:

    
    
    from django.conf.urls import patterns, include, url
    from hello_django.views import current_time,hello,what
    
    
    urlpatterns = patterns('',
        url(r'^time/$','current_time'),
        url(r'^what/$','what'),
        url(r'^hello/([a-zA-Z0-9]+)','hello'),
    )
    

this is the url I'm trying:

    
    
    http://127.0.0.1:8000/what/
    

stack trace:

    
    
    TypeError at /what/
    'str' object is not callable
    Request Method: GET
    Request URL:    http://127.0.0.1:8000/what/
    Django Version: 1.5.1
    Exception Type: TypeError
    Exception Value:    
    'str' object is not callable
    Exception Location: C:\Python27\lib\site-packages\django\core\handlers\base.py in get_response, line 115
    Python Executable:  C:\Python27\python.exe
    Python Version: 2.7.4
    Python Path:    
    ['D:\\Developer Center\\PyCharm\\helloDjango',
     'C:\\Python27\\lib\\site-packages\\pip-1.3.1-py2.7.egg',
     'C:\\Python27\\lib\\site-packages\\mysql_python-1.2.4-py2.7-win32.egg',
     'D:\\Developer Center\\PyCharm\\helloDjango',
     'C:\\Windows\\SYSTEM32\\python27.zip',
     'C:\\Python27\\DLLs',
     'C:\\Python27\\lib',
     'C:\\Python27\\lib\\plat-win',
     'C:\\Python27\\lib\\lib-tk',
     'C:\\Python27',
     'C:\\Python27\\lib\\site-packages',
     'C:\\Python27\\lib\\site-packages\\PIL']
    Server time:    Tue, 7 Jan 2014 11:44:30 +0330
    Traceback Switch to copy-and-paste view
    
    C:\Python27\lib\site-packages\django\core\handlers\base.py in get_response
                            response = callback(request, *callback_args, **callback_kwargs) ...
    ▶ Local vars
    


Answer: You need to give the actual **view** to `url()`:

    
    
    urlpatterns = patterns('',
        url(r'^time/$', current_time),
        url(r'^what/$', what),
        url(r'^hello/([a-zA-Z0-9]+)', hello),
    )
    

Note that I removed the quotes around `what` and the other view functions.

You can still use strings in the `url()` configurations, but then you need to
use a `<modulename>.<viewname>` syntax or name the module in the first
argument to `patterns()` (the string), and then you also don't need to import
the functions:

    
    
    urlpatterns = patterns('',
        url(r'^time/$', 'hello_django.views.current_time'),
        url(r'^what/$', 'hello_django.views.what'),
        url(r'^hello/([a-zA-Z0-9]+)', 'hello_django.views.hello'),
    )
    

or

    
    
    urlpatterns = patterns('hello_django.views',
        url(r'^time/$', 'current_time'),
        url(r'^what/$', 'what'),
        url(r'^hello/([a-zA-Z0-9]+)', 'hello'),
    )
    

See the [detailed URL dispatcher
documentation](https://docs.djangoproject.com/en/1.6/topics/http/urls/).

