Django: поддержка аргументов строкового представления для url () устарела и будет удалена в Django 1.10

Новый пользователь python / Django (и действительно новый для SO):

При попытке переноса моего проекта Django возникает ошибка:

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') 

По-видимому, второй аргумент больше не может быть строкой. Я пришел, чтобы создать этот код, как и через учебник на multipalsight.com, который учит использовать Django с предыдущей версией (сейчас я работаю с 1.9). Учитель инструктирует нас создавать urlpatterns в urls.py из представлений, которые мы создаем в приложениях. Он учит нас создавать urlpattern, такие как:

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

ссылаться

 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 

в view.py приложения «main», которое я создал.

Если этот метод устарел, как передать аргумент представления не как строку? Если я просто удалю кавычки, как показано в документации ( https://docs.djangoproject.com/en/1.9/topics/http/urls/ ), я получаю сообщение об ошибке:

 NameError: name 'main' is not defined 

Я попытался «импортировать» представления или основные, используя код, представленный в этой документации:

 from . import views 

или

 from . import main 

который дал мне:

 ImportError: cannot import name 'views' 

а также

 ImportError: cannot import name 'main' 

Я считаю, что я проследил это до ошибки импорта, и в настоящее время я изучаю это.

  • Получите субдомен от URL-адреса с помощью Python
  • Кодирование URL в python
  • Колба: получить текущий маршрут
  • Есть ли функция для Python, которая похожа на getimagesize в PHP?
  • Разбор заголовка HTTP-запроса с помощью Python
  • Имя файла urllib2
  • Парсинг Параметр URI и пары ключевых слов
  • Regex, чтобы найти URL-адреса в строке в Python
  • 3 Solutions collect form web for “Django: поддержка аргументов строкового представления для url () устарела и будет удалена в Django 1.10”

    Я нашел ответ на свой вопрос. Это была ошибка импорта. Для Django 1.10 вам нужно импортировать файл view.py приложения, а затем передать второй аргумент url () без кавычек. Вот мой код сейчас в 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) ] 

    Я ничего не менял в файлах app или view.py.

    Поддержки к @Rik Poggi для иллюстрации того, как импортировать в свой ответ на этот вопрос: Django – импорт видов из отдельных приложений

    Вы должны иметь возможность использовать следующее:

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

    Я не совсем уверен, как выглядит ваша структура каталогов, но с использованием относительного импорта, такого как from . import X from . import X – это когда файлы находятся в одной папке друг с другом.

    Вы можете использовать свои функции, импортировав их все из списка и добавив каждый из них в urlpatterns.

     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), ] 
    Python - лучший язык программирования в мире.