Django 'str' 对象不可调用。如何处理?

RIP*_*RIP 5 python string django

我的应用程序的一部分有问题。一切正常,但当我点击一个名为“koszyk”的链接时,我得到:

TypeError at /sklep/koszyk/

'str' object is not callable

Request Method:     GET
Request URL:    http://localhost:8000/sklep/koszyk/
Exception Type:     TypeError
Exception Value:   'str' object is not callable

Exception Location:     /usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py in get_response, line 99
Python Executable:  /usr/bin/python
Python Version:     2.7.6
Python Path:    ['/home/mdawidowski/szkola/django/sklepik', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
Server time:    Pi, 5 Czerw 2015 18:49:26 +0200
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一切,但找不到任何东西......我只知道问题出在模型“koszyk”上,因为其他一切都运行良好。我希望你能帮助我。

我的文件:Views.py

# coding: utf-8
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.views.generic.simple import direct_to_template
from django.core.mail import send_mail
from django.template import Context, loader
from django.conf import settings
from sklep.models import Produkt
from sklep.forms import ZamowienieForm

def koszyk(request):
    koszyk = request.session.get('koszyk', [])
    produkty = list(Produkt.objects.filter(pk__in=koszyk))

    if request.method == 'POST':
        formularz = ZamowienieForm(request.POST)

        if formularz.is_valid():
            dane = formularz.cleaned_data
            tresc = loader.get_template('sklep/zamowienie.txt').render(Context({'produkty': produkty, 'dane': dane}))

            send_mail('Potwierdzenie zakupu', tresc, settings.EMAIL_SKLEPU, [dane['email']])
            send_mail(u'Zamówienie', tresc, dane['email'], [settings.EMAIL_SKLEPU])

            del request.session['koszyk']

            return HttpResponseRedirect(reverse('sklep_koszyk'))
    else:
        formularz = ZamowienieForm()

    if koszyk:
        kontekst = {'koszyk': produkty, 'formularz': formularz}
    else:
        kontekst = {'koszyk': []}

    return direct_to_template(request, 'sklep/koszyk.html', extra_context = kontekst)

def koszyk_dodaj(request, id_produktu):
    koszyk = request.session.get('koszyk', [])
    if int(id_produktu) not in koszyk:
        koszyk.append(int(id_produktu))
    request.session['koszyk'] = koszyk
    return HttpResponseRedirect(reverse('sklep_koszyk'))
Run Code Online (Sandbox Code Playgroud)

网址.py

from django.conf.urls.defaults import * from sklep.models import Produkt

urlpatterns = patterns('',
    url(r'^produkty/$', 'django.views.generic.list_detail.object_list', {'queryset': Produkt.objects.all().select_related('kategorie'), 'paginate_by': 1}, "sklep_produkty"),  
    url(r'^koszyk/$', 'koszyk', name="sklep_koszyk"), 
    url(r'^koszyk/dodaj/(\d+)/$', 'koszyk_dodaj', name="sklep_koszyk_dodaj"),
 )
Run Code Online (Sandbox Code Playgroud)

如果有人可以帮助我,那就太好了。

Roh*_*han 4

koszyk您多次使用变量名称并为其分配了不同的值。

例如,您的视图名称是koszyk,在同一视图中您使用相同的变量名称来存储结果request.session.get('koszyk', [])

因此,请清理代码以解决此类问题。

另外,在您urls.py给出视图的完整路径而不仅仅是函数名称时,例如指定'<app_name>.views.koszyk'