使用点运算符访问字典时条件语句在 Django 模板中不起作用
Posted
技术标签:
【中文标题】使用点运算符访问字典时条件语句在 Django 模板中不起作用【英文标题】:Conditional Statement not working in Django template while accessing a dictionary with dot operator 【发布时间】:2020-08-10 23:27:29 【问题描述】:如果文件 daily-yyyy-mm.csv 退出但它总是显示 Not Avaialable,我正在尝试提供下载选项 即使文件存在。
我在views.py 中创建了一个字典(file_list),如果文件存在,它会为该索引保存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。
【问题讨论】:
什么是file_list.upload.upload_report_date
,当您只是在视图中渲染或打印它时?
如果我只是渲染它是空的。
【参考方案1】:
您当前尝试从模板中访问字典 file_list
:file_list.uplad.upload_report_date
。
有了它,您将始终登陆else
,因为您无法通过这种方式访问它。
您的代码尝试获取 file_list
的属性 upload
,因为它不存在,所以总是返回 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 %
...
【讨论】:
以上是关于使用点运算符访问字典时条件语句在 Django 模板中不起作用的主要内容,如果未能解决你的问题,请参考以下文章