Проблема с импортом Django, не могу импортировать myapp, но установил его в setings

Я работаю над проектом Django и сталкиваюсь с ошибкой ImportError при попытке импортировать функцию из моего приложения в файл urls.py. Несмотря на то, что функция определена и приложение добавлено в INSTALLED_APPS, Django не может найти эту функцию. Структура проекта: myproject/ manage.py dictionarapicol/ init.py settings.py urls.py asgi.py wsgi.py статика/ find.js

myapp/
    migrations/
        __init__.py
    templates/
       base.htm
       index.html

    __init__.py
    text_processing.py
    admin.py
    apps.py
    models.py
    tests.py
    views.py
    urls.py

myapp/urls.py:

from django.urls import path
from myapp import views
from .text_processing import process_text

urlpatterns = [
    path('', views.home, name='index'),
    path('contact/', views.contact, name='contact'),
    path('stiri_apicole/', views.login, name='stiri_apicole'),
    path('text_processing/', process_text, name='text_processing'),
]

text_processing.py

from django.http import JsonResponse
import json
from nltk.stem.snowball import SnowballStemmer
import stanza
import spacy_stanza
from rowordnet import RoWordNet

# Load dictionary data
with open('static\dictionary.json', 'r', encoding='utf-8') as file:
    dictionary_data = json.load(file)

# Initialize NLTK, spaCy, Stanza, andin stall RoWordNet
stemmer = SnowballStemmer("romanian")
nlp = spacy_stanza.load_pipeline('ro')
import rowordnet as rwn
wn = RoWordNet()

def process_text(request):
    text = request.GET.get('text', '')
    stemmed_text = stemmer.stem(text)
    doc = nlp(text)
    lemmatized_text = ' '.join([token.lemma_ for token in doc])
    synset_ids = wn.synsets(literal=text)
    synsets = [wn.synset(synset_id).definition for synset_id in synset_ids]

    return JsonResponse({
        'stemmed_text': stemmed_text,
        'lemmatized_text': lemmatized_text,
        'RoWordNet_synsets': synsets
    })

views.py

from django.shortcuts import render

# Create your views here.
def home(request):
    return render(request, 'index.html')

def contact(request):
    return render(request, 'contact.html')

def login(request):
'stiri_apicole.html')

# views.py
from .text_processing import process_text

find.js

ocument.getElementById('searchInput').addEventListener('input', function (e) {
    const searchTerm = e.target.value;

    // Send the search term to Django backend for processing
    fetch(`text_processing.py/?text=${encodeURIComponent(searchTerm)}`)
        .then(response => response.json())
        .then(data => {
            // Use processed text (stemmed, lemmatized, etc.) from backend for Fuse.js search
            // Assuming the backend sends back a similar JSON structure
            const processedText = data.lemmatized_text; // Choose between stemmed_text or lemmatized_text
            const results = fuse.search(processedText);
            displayResults(results.map(result => result.item));
        })
        .catch(error => {
            console.error("Error processing text:", error);

введите описание изображения здесь

Я проверил, что init.py существует в каждом каталоге, поэтому Python должен распознать их как пакеты. Я пробовал импортировать process_text непосредственно в views.py, а затем ссылаться на него в urls.py, но ошибка сохраняется. Приложение включено в INSTALLED_APPS в settings.py.

Попробуйте следующее, что может помочь

  1. Импорт с использованием имени каталога проекта в качестве пакета для импорта. Уменьшает количество ошибок и облегчает миграцию в будущем
  2. .

Пример:

from myapp.text_processing import process_text
  1. Всегда импортируйте пакеты сверху, это стандартная практика
  2. .

Внесите следующие изменения в ваш код в разделе views.py

from django.shortcuts import render

def home(request):
    return render(request, 'index.html')

def contact(request):
    return render(request, 'contact.html')

def login(request):
    return render(request, 'stiri_apicole.html')

# Notice that this line has been removed?

А в urls.py

from django.urls import path
from myapp import views, text_processing

urlpatterns = [
    path('', views.home, name='index'),
    path('contact/', views.contact, name='contact'),
    path('stiri_apicole/', views.login, name='stiri_apicole'),
    path('text_processing/', text_processing.process_text, name='text_processing'),
]
Вернуться на верх