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),
]