представление должно быть вызываемым или списком / кортежем в случае включения - PullRequest
0 голосов
/ 03 июля 2019

Я новичок в django. Я получаю эту ошибку при запуске:

python manage.py runserver

это URL моего приложения (main.urls)

from . import views
from main import views as main_views
from django.contrib.auth import views as auth_views
from main.views import blog, about
from django.conf.urls import include, url

urlpatterns = [
    path('about/', 'main.views.about', name='about'),
    path('', 'main.views.blog', name='blog'),
]

это мой полный проект: https://github.com/ouakkaha/pr я буду так благодарен, если вы найдете решение для меня:)

Ответы [ 2 ]

1 голос
/ 03 июля 2019

Вы должны создать свои path s, удалив кавычки ваших просмотров, ссылающиеся на:

from main.views import blog, about


urlpatterns = [
    path('about/', about, name='about'),
    path('', blog, name='blog'),
]

Поскольку вы уже импортировали свои представления, вы должны только писать их имена.


Больше информации в документах.

0 голосов
/ 04 июля 2019

Я верю, что ответ wencakisa должен решить проблему, но позвольте мне объяснить все с самого начала, возможно, это прояснит ситуацию.

В функции path необходимо передать три аргумента:

  1. route - это будет часть URL-адреса.Это должна быть строка;
  2. представление - как говорится в сообщении об ошибке, оно должно быть вызываемым - что-то, что можно вызвать, например, function ;
  3. имя (необязательно) - здесь это менее важно;это должна быть строка.

В своем коде вы помещаете секундные аргументы в path в кавычках, что означает, что они являются просто строками, а не функциями:

'main.views.about'  # this is a string - just a few characters put together
main.views.about   # this is a function, defined in the directory `main`, 
                   # in the file `views`

Еще одна проблема - импорт.В вашем файле есть несколько ненужных операторов импорта.Если вы хотите использовать объекты (функции, классы и т. Д.) Из файла A в файле B, вам необходимо импортировать их в файл B. Вы можете сделать это несколькими способами:

from . import views  # reads: "from the same directory in which the current file (B) is, 
                    # import `views.py`, and everything that's inside it." 
                    # This is called "a relative import"
# and then you can use the imported objects like this:
path('about/', views.about, name='about')
from main import views as main_views  # reads: "from the directory `main` in the project
                                     # import the entire `views`, but call it `main_views`
# and then you can use the imported objects like this:
path('about/', main_views.about, name='about')
from main.views import blog, about  # reads: from the `main/views.py` import only `blog`
                                    # and `about` - these two are the functions you need
# and then you use them like this:
path('about/', about, name='about')

Я бы предложил вам выбрать один стиль импорта и использовать его последовательно.Последнее в этом случае неплохо, потому что вы можете легко увидеть, какие функции были импортированы из файла views.Два других оператора импорта будут лишними, вы можете удалить их.

Надеемся, это поможет вам решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...