Условный оператор не работает в шаблоне Django при доступе к словарю с оператором точки - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь предложить вариант загрузки, если файл daily-yyyy-mm.csv выходит, но он всегда показывает Not Avaialable , даже если файл существует.

Я сделал словарь (file_list) в views.py, который сохраняет значение True для этого индекса, если файл существует. Я проверил путь, сгенерированный в os.path.join, и он правильный, а также в словаре есть True для существующих файлов. Я думаю, что проблема заключается в использовании 2 вложенных точечных операторов при доступе к словарю в шаблоне.

Шаблон

        {% for upload in upload_list %}
        <tr>
            {%if file_list.upload.upload_report_date %}
            <td><a href="{%static 'media/daily-{{ upload.upload_report_date|date:"Y-m" }}.csv" download >Download</a></td>

            {% else %}
            <td>Not Available</td>
            {% endif %}
        </tr>
        {% endfor %}

Views.py

    upload_list = Upload.objects.all().order_by('-upload_at')
    file_list={}
    for upload in upload_list:
        try:
            if os.path.exists(os.path.join(settings.MEDIA_ROOT,'daily-%s.csv' % (upload.upload_report_date).strftime("%Y-%m"))):
                file_list[upload.upload_report_date]=True
        except:
            pass

Я использую python 2,7 и django 1,6,7.

1 Ответ

2 голосов
/ 27 апреля 2020

В настоящее время вы пытаетесь получить доступ к словарю file_list из вашего шаблона: file_list.uplad.upload_report_date.

При этом вы всегда попадете в else, потому что вы не можете получить к нему доступ таким образом. Ваш код пытается получить свойства upload из file_list, которые всегда будут возвращать None, так как он не существует.

Что вы можете сделать, это создать список доступных файлов (так как вы уже назвала вашу переменную _list):

file_list = []
for upload in upload_list:
    try:
        if os.path.exists(...):
            file_list.append(upload.upload_report_date)
    except:
        pass

Тогда внутри вашего шаблона:

{% if upload.upload_report_date in file_list %}
...
...