urls patterns from python django url deprecated

python - patterns - path to url django



Django: el soporte para los argumentos de la vista de cadena a url() está en desuso y se eliminará en Django 1.10 (3)

Nuevo usuario de python / Django (y de hecho nuevo en SO):

Cuando intento migrar mi proyecto Django, aparece un error:

RemovedInDjango110Warning: Support for string view arguments to url() is deprecated and will be removed in Django 1.10 (got main.views.home). Pass the callable instead. url(r''^$'', ''main.views.home'')

Aparentemente, el segundo argumento ya no puede ser una cadena. Vine a crear este código tal como está a través de un tutorial en pluralsight.com que enseña a usar Django con una versión anterior (actualmente estoy trabajando con 1.9). El docente nos indica que creemos urlpatterns en urls.py a partir de las vistas que creamos en las aplicaciones. Nos enseña a crear un urlpattern como el siguiente:

from django.conf.urls import url from django.contrib import admin urlpatterns = [ url(r''^admin/'', admin.site.urls), url(r''^$'', ''main.views.home'') ]

referirse

def home(request): return render(request, "main/home.html", {''message'': ''You/'ve met with a terrible fate, haven/'t you?''}) #this message calls HTML, not shown, not important for question

en el views.py de una aplicación "principal" que creé.

Si este método está en desuso, ¿cómo paso el argumento de vista no como una cadena? Si elimino las comillas, como se muestra en la documentación ( https://docs.djangoproject.com/en/1.9/topics/http/urls/ ), aparece un error:

NameError: name ''main'' is not defined

Traté de "importar" vistas o main usando el código presentado en esta documentación:

from . import views

o

from . import main

que me dio:

ImportError: cannot import name ''views''

y

ImportError: cannot import name ''main''

Creo que he rastreado esto hasta un error de importación, y actualmente estoy investigando eso.


Debería poder usar lo siguiente:

from django.conf.urls import url from django.contrib import admin from main import views urlpatterns = [ url(r''^admin/'', admin.site.urls), url(r''^$'', views.home) ]

No estoy absolutamente seguro de cómo se ve la estructura de tu directorio, pero usando una importación relativa como from . import X from . import X es para cuando los archivos están en la misma carpeta que los demás.


He encontrado la respuesta a mi pregunta. De hecho, fue un error de importación. Para Django 1.10, ahora tiene que importar view.py de la aplicación, y luego pasar el segundo argumento de url () sin comillas. Aquí está mi código ahora en urls.py:

from django.conf.urls import url from django.contrib import admin import main.views urlpatterns = [ url(r''^admin/'', admin.site.urls), url(r''^$'', main.views.home) ]

No cambié nada en la aplicación o en los archivos view.py.

Apoyos a @Rik Poggi para ilustrar cómo importar en su respuesta a esta pregunta: Django: Importa vistas desde aplicaciones separadas


Puede usar sus funciones importando todas ellas de la lista y agregando cada una de ellas a los patrones url.

from django.conf.urls import url from django.contrib import admin from main.views import( home, function2, function3, ) urlpatterns = [ url(r''^admin/'', admin.site.urls), url(r''^$'', home), url(r''^$'', function2), url(r''^$'', function3), ]