AttributeError at type object 'Services' has no attribute 'app'
Я недавно начал разрабатывать Django. Я хочу связать мой алгоритм на python и Django web ui, поэтому я попытался связать их оба в views.py, но столкнулся с проблемой.
Пишет AttributeError at type object 'Services' has no attribute 'app' но я объявил его в queryOnMetadataModel.init. Я не знаю, что не так. Кто-нибудь может мне помочь?
Вот мои фрагменты кода;
- queryOnMetadataModel.py
from Neo4jConnection import App
import json class Services:`
def __init__(self):
uri = "neo4j+s://a50f760a.databases.neo4j.io:7687"
user = "neo4j"
password = "password"
self.app = App(uri, user, password)
def find_node_type(self,nodeName):
node_type = self.app.find_node_type(nodeName)
self.app.close()
return node_type
- views.py
from django.shortcuts import render
from BitirmeTeziSourceCode.queryOnMetadataModel import Services
import sys
sys.path.append(".")
# Create your views here.
def home(request):
data = Services.find_node_type(Services , 'Region')
nodes = {
"nodes" : data
}
return render(request , "index.html" , nodes)
urls.py
from django.urls import path
from . import views
urlpatterns = [
path("" , views.home)
]
Я хочу получить доступ к выводу Services.find_node_type(Services , 'Region') из index.html
Сообщение об ошибке "Attribute 'app' of 'Services' objects is not writable," возникает потому, что вы пытаетесь установить значение атрибута класса 'Services', а не экземпляра этого класса. В строке data = Services.find_node_type(Services , 'Region') вы вызываете метод find_node_type класса 'Services' вместо экземпляра этого класса.
Чтобы исправить это, сначала создайте экземпляр класса 'Services', а затем вызовите метод find_node_type на этом экземпляре. Это можно сделать, создав переменную services = Services() перед вызовом метода, а затем вызвав data = services.find_node_type('Region').
Вот обновленный код views.py:
from django.shortcuts import render
from BitirmeTeziSourceCode.queryOnMetadataModel import Services
import sys
sys.path.append(".")
def home(request):
services = Services()
data = services.find_node_type('Region')
nodes = {
"nodes" : data
}
return render(request , "index.html" , nodes)
Кроме того, вы можете добавить некоторую обработку ошибок в вашу функцию, если вы хотите обрабатывать любые исключения, которые могут возникнуть во время выполнения функции.
Вам нужно сначала создать экземпляр, а не использовать класс напрямую, поэтому:
def home(request):
instance=Services()
data = instance.find_node_type('Region')
nodes = {
"nodes" : data
}
return render(request , "index.html" , nodes)
Примечание: Также лучше писать классы в единственном числе, поэтому лучше писать
Service
, а не.Services