Как вызвать функцию python из views.py в html-шаблоне
Я новичок в Django Framework и мне нужно закончить проект. Сейчас я застрял на чем-то. Пожалуйста, кто-нибудь помогите мне.
Я переделываю шаблон "borrow.html". В html-коде я хочу вызвать функцию из views.py. Я пробовал так:
Это views.py:
def borrowBook(request):
return render(request,'app_system_borrow/borrow.html', {'infoBorrowCode': infoBorrowCode()})
def write_read_file():
filepath='app_system/utils/output_QRscan.txt'
with open(filepath,'r') as ff:
file_content=ff.read()
file_content=file_content.strip()
return file_content
def infoBorrowCode():
file_content=write_read_file()
books=apps.get_model('app_common','Book')
items_book=books.objects.all()
for i in items_book:
if(i.label == file_content):
return redirect('info-borrow/')
return "doesn't exist"
def infoBorrow(request):
print("dhskld")
return render(request,'app_system_borrow/info-borrow.html')
Это borrow.html:
{% extends "base_system.html" %}
{% block title %}CONTILIB{% endblock title %}
{% block content %}
<div class="interaction-container">
<div class="bot-interaction">
<p>Please scan the <b>QR code</b> of the book.</p>
</div>
</div>
{% endblock content %}
{{
infoBorrowCode
}}
Это urls.py:
urlpatterns = [
path("favicon.ico",RedirectView.as_view(url=staticfiles_storage.url("img/avicon.ico"))),
path('', views.borrowBook, name="borrowURL"),
path('info-borrow/', views.infoBorrow),
]
Я поместил несколько отпечатков в функцию infoBorrowCode() из views.py, чтобы проверить, вызывается ли функция, и она вызывается, но после return redirect('info-borrow/') печать из функции infoBorrow(request) не работает. Она ничего не печатает. Так что, я думаю, моя версия не очень хороша.
Может ли кто-нибудь объяснить, что я делаю не так? Пожалуйста... Или если есть другой вариант для этого...
смотрите здесь (https://docs.djangoproject.com/en/4.1/topics/http/shortcuts/#redirect). но если у вас все еще есть проблемы, пожалуйста, спросите ясно...
Создан файл output_QRscan со следующими записями: aaa,eee. База данных выглядит следующим образом:
Когда вызывается представление borrowBook, происходит чтение файла. Данные преобразуются в массив и возвращаются в представление. Затем на основе этого массива выполняется выборка из базы данных и отображается на странице.
views.py
def write_read_file():
filepath = 'app_system/utils/output_QRscan.txt'
with open(filepath, 'r') as ff:
file_content = ff.read()
file_content = file_content.strip().split(',')
return file_content
def borrowBook(request):
arr = write_read_file()
items_book = books.objects.filter(name__in=arr)
return render(request, 'app_system_borrow/borrow.html', {'context': items_book})
borrow.html
{% for aaa in context %}
<p>{{ aaa.id }} : {{ aaa.name }}</p>
{% endfor %}
urls.py
urlpatterns = [
path('borrowbook/', views.borrowBook, name="borrowURL"),
]
Выход
1 : aaa
5 : eee