簡體   English   中英

Python Django ImportError:無法導入名稱(未知位置)

[英]Python django ImportError: cannot import name (unknown location)

我開始使用Django,並且能夠使Django Rest Framework工作。 現在,我正在嘗試使用https://django-elasticsearch-dsl-drf.readthedocs.io/en/0.18/並遵循https://github.com/barseghyanartur/django-elasticsearch-dsl-drf/tree來進行Elasticsearch / master / examples / simple

我遵循了這些示例,並按照這些原則構建了我的項目。 當我嘗試啟動服務器時,我收到ImportError,請問任何人可以查看一下,並向我提供有關我可能缺少的內容的指導。 隨函附上有關我的環境的一些詳細信息,以供參考。

謝謝

環境:

cmd > pip freeze | find "Django"
django-cors-headers==3.0.2
django-elasticsearch-dsl==0.5.1
django-elasticsearch-dsl-drf==0.18
django-filter==2.1.0
django-nine==0.2.2
djangorestframework==3.9.4

目錄結構

demosite 
    demosite
        settings.py [INSTALLED_APPS contains my_rest_app, search_indexes]


my_rest_app   [which works with http://localhost:8000/my_rest_app/]        

search_indexes
    viewsets
        publisher.py  [see below]
    urls.py [see below]
    documents
        publisher.py [see below]




search_indexes/url.py
---------------------
from django.conf.urls import url, include
from rest_framework.routers import DefaultRouter
from search_indexes.viewsets import PublisherDocumentViewSet

urlpatterns = [
    url(r'^', include(router.urls)),
]

# **********************************************************
# *********************** Publishers ***********************
# **********************************************************
router.register(
    r'publishers',
    PublisherDocumentViewSet,
    basename='publisherdocument'
)


search_indexes/viewsets/publisher.py
------------------------------------
from django_elasticsearch_dsl_drf.pagination import LimitOffsetPagination
from django_elasticsearch_dsl_drf.viewsets import DocumentViewSet

from ..documents import PublisherDocument
from ..serializers import PublisherDocumentSerializer
__all__ = (
    'PublisherDocumentViewSet',
)

class PublisherDocumentViewSet(DocumentViewSet):
    """The PublisherDocument view."""

    document = PublisherDocument
    serializer_class = PublisherDocumentSerializer


search_indexes/documents/publisher.py
--------------------------------------
from my_rest_app.models import Publisher

__all__ = ('PublisherDocument',)

INDEX = Index(settings.ELASTICSEARCH_INDEX_NAMES[__name__])

# See Elasticsearch Indices API reference for available settings
INDEX.settings(
    number_of_shards=1,
    number_of_replicas=1,
    blocks={'read_only_allow_delete': False},
    # read_only_allow_delete=False
)


@INDEX.doc_type
class PublisherDocument(DocType):
    """Publisher Elasticsearch document."""


search_indexes/serializers/publisher.py
---------------------------------------
from ..documents import PublisherDocument

__all__ = (
    'PublisherDocumentSerializer',
    'PublisherDocumentSimpleSerializer',
)


class PublisherDocumentSerializer(serializers.Serializer):
and
class PublisherDocumentSimpleSerializer(DocumentSerializer):
    """Serializer for Publisher document."""

---------demosite/urls.py
---------demosite/urls.py    
from django.contrib import admin
from django.urls import include, path
from django.views.generic import RedirectView
#from search_indexes import urls as search_index_urls


urlpatterns = [
    path('my_rest_app/', include('my_rest_app.urls')),

    path('search_indexes/', include('search_indexes.urls')),

    path('admin/', admin.site.urls),
    path('', RedirectView.as_view(url='/my_rest_app/', permanent=True)),

    #path('', RedirectView.as_view(url='/search_indexes/', permanent=True)),

]


--------- stack trace -------

  File "C:\apps\Python37-32\lib\site-packages\django\urls\resolvers.py", line 572, in urlconf_module
    return import_module(self.urlconf_name)
  File "C:\apps\Python37-32\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "C:\demosite\demosite\urls.py", line 25, in <module>
    path('search_indexes/', include('search_indexes.urls')),
  File "C:\apps\Python37-32\lib\site-packages\django\urls\conf.py", line 34, in include
    urlconf_module = import_module(urlconf_module)
  File "C:\apps\Python37-32\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "C:\demosite\search_indexes\urls.py", line 3, in <module>
    from search_indexes.viewsets import PublisherDocumentViewSet
ImportError: cannot import name 'PublisherDocumentViewSet' from 'search_indexes.viewsets' (unknown location)

它顯示導入PublisherDocumentViewSet時出錯, cannot import name 'PublisherDocumentViewSet' from 'search_indexes.viewsets'

嘗試將search_indexes / url.py中的導入更改為:

from search_indexes.viewsets.publisher.py import PublisherDocumentViewSet

要么

from .viewsets import PublisherDocumentViewSet

如果在文件夾視圖集內的文件Publisher.py中定義了類PublisherDocumentViewSet,則它應解決此錯誤。

編輯:就像評論中提到的@Iain Shelvington一樣,所有文件夾都應在其中包含__init__.py文件。 如果您檢查存儲庫中的文件夾,則它具有一個init文件。 Github

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM