Невозможно импортировать представления в Django (2.1.4, Python 3.7.0, Win 7) - PullRequest
1 голос
/ 05 июня 2019

Я создаю сайт с помощью django и не могу импортировать представления в мой файл URL.

Мой файл URL:

from django.contrib import admin
from django.urls import path
from django.conf.urls import include
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
]

Ошибка: ошибка ImportError: невозможно импортировать имена «views» из «блога» (.. \ blog \ blog__init __. Py)

Если я пытаюсь "из представлений импорта блога", я получаю ту же ошибку.

Если я попытаюсь «из представлений импорта blogapp» (blogapp - это название приложения в блоге), я получу:

RecursionError: maximum recursion depth exceeded while calling a Python object.

По сути, он возвращается туда и обратно между строкой 23 в check_resolver (django \ core \ check \ urls.py) и строкой 397 в check (django \ urls \ resolvers.py).

Если я попытаюсь просто: «импортировать представления», я получу «ModuleNotFoundError: нет модуля с именем« views »»

Структура моего проекта: Основной каталог "blog", содержит две папки (blog и blogapp), а также файлы db.sqlite3 и manage.py.

Подпапка блога содержит папку pycache и следующие файлы: init .py, settings.py, urls.py, wsgi.py.

Подпапка blogapp содержит папку миграции папок pycache и следующие файлы: init .py, admin.py, apps.py, models.py, tests.py, views.py .

И блог, и blogapp находятся в моем INSTALLED_APPS в settings.py.

Я проверил несколько вопросов с одинаковыми именами (и их предлагаемые ответы) и не смог понять, что происходит не так.

1 Ответ

1 голос
/ 05 июня 2019

Сначала переименуйте папку вашего проекта во что-то отличное от папки приложения, такой как blog-project. Тогда у вас должно быть обновленное дерево следующим образом:

блог-проект
-blog (settings.py, urls.py и wsgi.py в этой папке)
--urls.py (см. мой пример 1)
-blogapp
--templates
--- blogapp
---- blogapp_home.html
---- index.html
--urls.py (В этом файле вы делаете из. импорт просмотров)

Когда вы переходите на домашнюю страницу, Django читает из вашего корня urls.py. Поскольку ваша начальная точка установлена ​​на:


path('', include('blogapp.urls')),

Затем он загружает urls.py из нового приложения, которое вы создали, blogapp. Из urls.py в папке blogapp импортируйте ваши представления.


# Example 1 blog-project/blog/urls.py

from django.contrib import admin
from django.urls import path, include
from blogapp import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index, name='home'),
    path('blogapp/', include('blogapp.urls')),
]
# Example 2 blog-project/blogapp/urls.py

from django.urls import path, include
from . import views

urlpatterns = [

    path('', views.blogapphome, name='blogapp-home'),

]
# Example 2 Views blog-project/blogapp/views.py

from django.shortcuts import render

def index(request):
    sometext = 'More Text'
    context = {'text': sometext}

    return render(request, 'blogapp/index.html', context)

def blogapphome(request):
    sometext = 'Some Text Here'
    context = {'text': sometext}

    return render(request, 'blogapp/blogapp_home.html', context)
# blog-project/blog/settings.py

INSTALLED_APPS = [
    'blogapp.apps.BlogappConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]


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