Как загрузить обновленный файл администратором в Django

#python #django #download

#python #django #Скачать

Вопрос:

то, что я пытаюсь сделать, это:

  • Администратор загружает PDF-файл из панели администратора. (1)
  • Он должен перейти к указанному шаблону. (2)
  • И его следует загрузить, нажав кнопку загрузки в шаблоне.

Итак, вот коды:

(1)

 class Reports(models.Model):

name = models.CharField(max_length=100, null=False, blank=False, verbose_name="File Name")
report = models.FileField()
  

(2)

 <tr>
   <td>"File Name must be showed in here"</td>
   <td class="text-center">PDF</td>
   <td class="text-center lang-tr-src"><a href="What way should i give here?" target="_blank"><i class="fas fa-file-download"></i></a></td>
   <td class="text-center lang-en-src"><a href="" target="_blank"><i class="fas fa-file-download"></i></a></td>
</tr>
  

На веб-сайте будет один отчет за каждый месяц. Я хочу перечислить их в шаблоне и сделать их загружаемыми.
Должен ли я написать представление для этого (если да, как это должно быть?) Или что мне делать?

Ответ №1:

Все данные, которые вы хотите отобразить в своем шаблоне, вам нужно записать в свой views.py , так что этот случай настолько специфичен.

views.py:

 def your_view_name(request):
    reports = Reports.objects.all()
    context = {
     'reports': reports
     }
    return render(request, 'your_template.html', context)
  

Затем создайте URL-адрес для вашего представления в urls.py

 urlpatterns = [
    path("", views.your_view_name, name='your_url_name')
     ]
  

Ваш шаблон:

 <tr>
       {% for obj in reports %}
       <td>{{ obj.name }}</td>
       <td class="text-center">PDF</td>
       <td class="text-center lang-tr-src"><a href="{{ obj.report.url }}" Download 
       target="_blank"><i class="fas fa-file-download"></i></a></td>
       <td class="text-center lang-en-src"><a href="" target="_blank"><i 
       class="fas fa-file-download"></i></a></td>
       {% endfor %}
  </tr>
  

Комментарии:

1. Вызов переменных в шаблоне из представления использует {{ v }} не {% v %}

2. @Moha369 да, я отвлекся, спасибо за ваш отзыв.

Ответ №2:

сначала создайте новое представление.

 def report_view(request):
    context = {}
    reports= Reports.objects.all()
    context['reports'] = reports
    return render(request, "pages/report.html", context)
  

создайте URL-адрес для этого представления в urls.py

 path('reports', report_view, name='report_view'),
  

в вашем шаблоне создайте forloop для этого контекста, как показано ниже:

 {% for report in reports %} 
<tr>
   <td>"File Name must be showed in here"</td>
   <td class="text-center">PDF</td>
   <td class="text-center lang-tr-src"><a href="report.report " target="_blank"><i class="fas fa-file-download"></i></a></td>
   <td class="text-center lang-en-src"><a href="" target="_blank"><i class="fas fa-file-download"></i></a></td>
</tr>
{% endfor %}