una tuplas sacar metodos llenar listas lista elementos conjuntos arreglos anidadas python django django-urls django-1.10

python - tuplas - URL de Django TypeError: la vista debe ser invocable o una lista/tupla en el caso de include()



metodos de listas en python (4)

Django 1.10 ya no le permite especificar vistas como una cadena (por ejemplo, ''myapp.views.home'' ) en sus patrones de URL.

La solución es actualizar su urls.py para incluir la vista invocable. Esto significa que debe importar la vista en su urls.py Si sus patrones de URL no tienen nombres, ahora es un buen momento para agregar uno, porque revertir con la ruta punteada de Python ya no funciona.

from django.conf.urls import include, url from django.contrib.auth.views import login from myapp.views import home, contact urlpatterns = [ url(r''^$'', home, name=''home''), url(r''^contact/$'', contact, name=''contact''), url(r''^login/$'', login, name=''login''), ]

Si hay muchas vistas, importarlas individualmente puede ser un inconveniente. Una alternativa es importar el módulo de vistas desde su aplicación.

from django.conf.urls import include, url from django.contrib.auth import views as auth_views from myapp import views as myapp_views urlpatterns = [ url(r''^$'', myapp_views.home, name=''home''), url(r''^contact/$'', myapp_views.contact, name=''contact''), url(r''^login/$'', auth_views.login, name=''login''), ]

Tenga en cuenta que lo hemos usado as myapp_views y as auth_views , lo que nos permite importar views.py desde múltiples aplicaciones sin que views.py en conflicto.

Consulte los documentos del despachador de URL de Django para obtener más información sobre urlpatterns .

Después de actualizar a Django 1.10, aparece el error:

TypeError: view must be a callable or a list/tuple in the case of include().

Mi urls.py es la siguiente:

from django.conf.urls import include, url urlpatterns = [ url(r''^$'', ''myapp.views.home''), url(r''^contact/$'', ''myapp.views.contact''), url(r''^login/$'', ''django.contrib.auth.views.login''), ]

El rastreo completo es:

Traceback (most recent call last): File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, in wrapper fn(*args, **kwargs) File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 121, in inner_run self.check(display_num_errors=True) File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/management/base.py", line 385, in check include_deployment_checks=include_deployment_checks, File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/management/base.py", line 372, in _run_checks return checks.run_checks(**kwargs) File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/checks/registry.py", line 81, in run_checks new_errors = check(app_configs=app_configs) File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/checks/urls.py", line 14, in check_url_config return check_resolver(resolver) File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/checks/urls.py", line 24, in check_resolver for pattern in resolver.url_patterns: File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/utils/functional.py", line 35, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/urls/resolvers.py", line 310, in url_patterns patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/utils/functional.py", line 35, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/urls/resolvers.py", line 303, in urlconf_module return import_module(self.urlconf_name) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) File "/Users/alasdair/dev/urlproject/urlproject/urls.py", line 28, in <module> url(r''^$'', ''myapp.views.home''), File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/conf/urls/__init__.py", line 85, in url raise TypeError(''view must be a callable or a list/tuple in the case of include().'') TypeError: view must be a callable or a list/tuple in the case of include().


Este error solo significa que myapp.views.home no es algo que se pueda llamar, como una función. Es una cadena de hecho. Si bien su solución funciona en django 1.9, sin embargo, arroja una advertencia que dice que esto dejará de ser la versión 1.10 en adelante, que es exactamente lo que sucedió. La solución anterior de @Alasdair importa las funciones de vista necesarias en el script a través from myapp import views as myapp_views o from myapp.views import home, contact


También puede obtener este error si tiene un choque de nombres de una vista y un módulo. Recibí el error cuando distribuyo mis archivos de vista en la carpeta de vistas, /views/view1.py, /views/view2.py e /views/view1.py, /views/view2.py un modelo llamado table.py en view2.py que resultó ser el nombre de una vista en view1.py. Entonces, nombrar las funciones de vista como v_table(request,id) ayudó.


Tu código es

urlpatterns = [ url(r''^$'', ''myapp.views.home''), url(r''^contact/$'', ''myapp.views.contact''), url(r''^login/$'', ''django.contrib.auth.views.login''), ]

cámbielo a lo siguiente mientras está importando la función include() :

urlpatterns = [ url(r''^$'', views.home), url(r''^contact/$'', views.contact), url(r''^login/$'', views.login), ]