Проблема с импортом 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.
Попробуйте следующее, что может помочь
- Импорт с использованием имени каталога проекта в качестве пакета для импорта. Уменьшает количество ошибок и облегчает миграцию в будущем .
Пример:
from myapp.text_processing import process_text
- Всегда импортируйте пакеты сверху, это стандартная практика .
Внесите следующие изменения в ваш код
в разделе 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'),
]