/ / 'str' objekt nie je možné vypovedať - python, django

"str" objekt nie disponibilná - python, django

Mám problém v django:

"str" object is not callable

kód:

urls.py Usuarios aplikácie:

from django.conf.urls import patterns, include, url
from django.contrib.auth.views import login, logout_then_login
from usuarios.views import Registro

urlpatterns = patterns("",
url(r"^login/$", "django.contrib.auth.views.login", {"template_name":"registration/login.html"},
name="login"),

url(r"^cerrar/$", "django.contrib.auth.views.logout_then_login",
name="logout"),

url(r"^registro/$", "Registro", name="registro"),
)

views.py

from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth import authenticate, login, logout
from django.core.context_processors import csrf

#importar el formulario de registro
from usuarios.forms import RegistroUsuario


def Registro(request):
if request.user.is_anonymous():
if request.method == "POST":
form = RegistroUsuario(request, POST)
if form.is_valid():
form.save()
return HttpResponse("Usuario creado sin problemas.")
else:
form = RegistroUsuario()
context = {}
context.update(csrf(request))
context["form"] = form
#pasar el context al template
return render_to_response("registro.html", context)
else:
return HttpResponseRedirect("/")

forms.py:

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm


class RegistroUsuario(UserCreationForm):
class Meta:
fields = ("first_name", "last_name", "email", "username", "password1", "password2")

S djangom som moc nepracoval a pravda je, že chyba mi v skutočnosti nehovorí, čo by mohlo byť zlé.

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/usuarios/registro/

Django Version: 1.6.2
Python Version: 2.7.6
Installed Applications:
("django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"usuarios")
Installed Middleware:
("django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware")


Traceback:
File "C:Python27libsite-packagesdjangocorehandlersbase.py" in get_response
114.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)

Exception Type: TypeError at /usuarios/registro/
Exception Value: "str" object is not callable

odpovede:

1 pre odpoveď č. 1

Pri odosielaní adresy URL ste svoje zobrazenie pomenovali nesprávne:

from usuarios.views import Registro

urlpatterns = patterns("",
# ...

url(r"^registro/$", "Registro", name="registro"),

Tu "Registro" nie je meno, ktoré môže Django importovať (nie je to úplná cesta k modulu), ani ste neurčili predponu, z ktorej sa má importovať (prvý argument pre patterns() je prázdny reťazec "").

Mali by ste buď dať skutočný objekt pohľadu (ktorý ste tu už naimportovali), alebo mu dať názov úplnej cesty k modulu.

Vyberte si jednu z nasledujúcich možností:

from usuarios.views import Registro

urlpatterns = patterns("",
# ...

url(r"^registro/$", Registro, name="registro"),

alebo

urlpatterns = patterns("",
# ...

url(r"^registro/$", "usuarios.views.Registro", name="registro"),

Prvá možnosť odovzdá funkciu skutočného zobrazenia do registra (ktorá funguje, pretože ste ju už naimportovali).

Druhá možnosť dáva úplnú cestu k modulu okrem názvu zobrazenia; Django to teraz môže importovať (hľadá . v reťazci, aby ste zistili, či sa dá niečo importovať).