Django error 'context must be a dict rather than DataFrame'
Я работаю над программой-переводчиком. Я хочу, чтобы результат появлялся внизу оригинальной страницы, когда пользователь нажимает кнопку 'Submit'.
Я создал функцию в 'views.py' и вернул результат в виде DataFrame (я проверил, что сам код Python в порядке) и получил ошибку 'context must be a dictator than data frame'. Я попробовал несколько способов изменить его на формат dict, но это только вызвало другие ошибки.
Вот мой код 'views.py' и код 'urls.py'. Пожалуйста, дайте мне знать, если что-то не так.
views.py
class Postview(View):
@csrf_exempt
def success(request):
content = request.POST.get('content')
dict = pd.read_csv("C:\\Users\\user\\jeju-dialect-translation\\jeju\\dialect\\dict2.csv", sep=",", encoding='cp949')
hannanum = Hannanum()
okt = Okt()
nouns = hannanum.nouns(content)
stem = okt.morphs(content, stem = True)
tempt=[]
for i in range(0, len(stem)):
if (len(stem[i]) == 1):
tempt.append(stem[i])
adjective = list(set(stem) - set(tempt))
results = pd.DataFrame(columns = {'siteName', 'contents'})
for i in nouns:
x = dict[dict['siteName'] == i]
x = x[['siteName', 'contents']]
results = pd.concat([results, x], axis = 0)
for i in adjective:
y = dict[dict['siteName'].str.match(i)]
results = pd.concat([results, y], axis = 0)
context = results.drop_duplicates()
return render(request, 'dialect/trans_suc.html', context)
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('dialect/', views.Postview.as_view(), name='main_page'),
path('trans/', views.Postview.success, name='trans_suc')
]
Вы можете использовать метод Pandas to_dict, https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_dict.html
context = results.to_dict()
‘dict’ (default) : dict like {column -> {index -> value}}
‘list’ : dict like {column -> [values]}
‘series’ : dict like {column -> Series(values)}
‘split’ : dict like {‘index’ -> [index], ‘columns’ -> [columns], ‘data’ -> [values]}
‘tight’ : dict like {‘index’ -> [index], ‘columns’ -> [columns], ‘data’ -> [values], ‘index_names’ -> [index.names], ‘column_names’ -> [column.names]}
‘records’ : list like [{column -> value}, … , {column -> value}]
‘index’ : dict like {index -> {column -> value}}
Контекст Django - это объект типа dictonary. Чтобы узнать о нем больше, перейдите по этой ссылке. В принципе, для устранения этой ошибки вы можете сделать следующее:
dropped_duplicates_result = results.drop_duplicates()
context = dropped_duplicates_result.to_dict()
Здесь вы отбрасываете дубликаты, затем преобразуете его в объект типа "словарь", поскольку контексты имеют тип словаря.
Документы для pandas.DataFrame.to_dict()