#python #django
Вопрос:
В своем приложении я создал рабочую функцию для загрузки всей информации о пользователях в мою базу данных. На моей html-странице я хотел бы также добавить дату последней загрузки csv-файла и количество новых профилей, добавленных с момента последней загрузки. Я думал использовать информацию, хранящуюся в файле имени, чтобы сделать это, но я получаю это имя ошибки 'file_name' is not defined
учетная запись.просмотры
@login_required def download_csv(request): response = HttpResponse(content_type='text/csv') profile_total = Information.objects.all().count() profile_csv_date_donwload = str(datetime.today().strftime("%d-%m-%Y")) file_naname = profile_csv_date_donwload str(profile_total) '.csv' response['Content-Disposition'] = 'attachment; filename=' file_naname writer = csv.writer(response, delimiter=';') info = Information.objects.all() writer.writerow(['first_name', 'last_name', 'gender', 'birthdate']) for i in info: writer.writerow([i.first_name, i.last_name, i.gender, i.birthdate]) return response
не загружайте.просмотров
from account.views import download_csv def download_page(request): profile_total = Information.objects.all().count() latest_d_csv = file_name[0:10] latest_n_csv = file_name[11:] new_profile = profile_total - int(latest_n_csv) context = { 'profile_total': profile_total, 'latest_d_csv': latest_d_csv 'latest_n_csv': latest_n_csv 'new_profile': new_profile } return render(request, 'page/download.html', context)
HTML
lt;div class="col-md-8"gt; lt;div class="row gutters-sm"gt; lt;div class="col-sm-6 mb-3"gt; lt;div class="card h-100"gt; lt;div class="card-body"gt; lt;h6 class="d-flex align-items-center mb-3"gt;Profile CSVlt;/h6gt; lt;br/gt; lt;smallgt;Profile in Database: {{ profile_total }}lt;/smallgt; lt;br/gt; lt;smallgt;Latest Download: {{ latest_d_csv}}lt;/smallgt; lt;br/gt; lt;smallgt;New Profile: {{ new_profile }}lt;/smallgt; lt;/divgt; lt;/divgt; lt;/divgt;
Ответ №1:
Имя файла в download_page не определено, поэтому либо вызвать эту функцию из download_cv, где определено имя файла, и передать имя файла в качестве аргумента, либо передать его через перенаправление download_cv на download_page..
Проверьте, нет ли ошибки опечатки в строке ниже( ее имя файла вместо имени файла) имя файла = profile_csv_date_donwload str(profile_total) ‘.csv
Как передать аргумент в функцию просмотра:
1-передача аргумента от функции к функции (обе функции принимают запрос в качестве аргумента):
в url.py:
urlpatterns = [ path('lowad_page/lt;str:file_namegt;', view.downlowad_page, name='downlowad_page'), ]
в view.py
def download_csv(request): . . . return redirect('downlowad_page', file_name) def download_page(request, file_name): . . . return response(request, ......)
2-В html вы можете передать аргумент с помощью тега url: "{% url 'downlowad_page' file_name %}"
убедитесь, что имя файла передано в html (вы можете передать его через контекст).
Комментарии:
1. Спасибо! Не могли бы вы помочь мне с каким-нибудь примером того, как достичь того, о чем вы говорите? Еще раз спасибо
2. Я добавил 2 примера, если вы сочтете мой ответ полезным, пожалуйста, озвучьте мой ответ, заранее спасибо