django - 如何列出自定义目录的所有文件
问题描述
我想让用户从列表中选择一个 courseName 并显示该目录下的所有文件,我该如何实现?我正在努力寻找一种方法来显示特定课程的所有文件。这是我到目前为止所做的:
视图.py
def showDocuments(request):
if request.POST:
if Document.objects.filter(courses__exact=request.POST["course"]).exists():
print(request.POST["course"])
else:
print("there is no files for this course yet!")
documents = Document.objects.all()
courses = Course.objects.all()
context = {
"documents" : documents ,
"courses" : courses,
}
return render(request , 'dashboard.html' , context )
模型.py
class Document(models.Model):
#to do : enum class !
DB = "data structure"
SF = "software enginering"
DS = "discrete structure "
WD = "web dev"
OPTIONS = "options"
courseChoices = (
(DB , "data structure"),
(SF , "software enginering "),
(DS , "discrete structure"),
(WD , "web dev"),
(OPTIONS , "options"),
)
courses = models.CharField(max_length=50, choices=courseChoices, default=OPTIONS)
description = models.TextField(help_text="A little description can be very helpful for others!")
document = models.FileField(upload_to=content_file_name)
uploaded_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return "{}".format(self.document)
def content_file_name(self, courses):
file_path = "documents/{courses}/{filename}".format(
courses=self.courses, filename=courses)
return file_path
仪表板.html
<div class="col-sm-4">
<select id="crs" class="custom-select custom-select-sm" name="course">
<option selected>option</option>
{% for obj in courses %}
<option value="{{ obj.courseName }}">{{ obj.courseName }}</option>
{% endfor %}
</select>
</div>
解决方案
所以这是我的解决方案:
def showDocuments(request, *args, **kwargs):
""" shows all the files of the requested course """
crs_names = CoursesNames.objects.all()
context = {
"crs_names": crs_names,
"files": [],
"not_found" : "",
}
if request.POST:
file_name = request.POST["course"]
not_found = "There are no files for {0} yet!".format(file_name)
documents = Document.objects.all().filter(course_name__courses__iexact=file_name)
context["documents"] = documents
context["filename"] = file_name
documentObjectList = Document.objects.all().values_list("document").filter(course_name__courses__iexact=file_name)
queryset = CoursesNames.objects.filter(courses__exact=file_name).exists()
if queryset:
while len(context["files"]) > 0: context["files"].pop()
for i in documentObjectList:
context["files"] = i
print(context["files"])
if len(context["documents"]) == 0: context["not_found"] = not_found
return render(request, 'dashboard.html', context)
推荐阅读
- python - 如何将名称添加到多个列?
- azure-devops - 是否可以从团队的父团队继承迭代?
- php - 我的 PHP 代码使用 PDO 从 SQLite 表中删除一行不起作用
- html - 为什么带有媒体查询的绝对单位是 CSS 行业标准?
- javascript - 如何获取 ReactJS 中日期输入的值?
- cluster-analysis - 如何从数据库表中的标称数据中获取向量以用于余弦相似度?
- python - 尝试对.append 使用多个参数,无论如何如何?
- python-3.x - Python-pydub:导出从 numpy 数组创建的 AudioSegment 时出现错误的样本宽度错误
- gitlab - 如何锁定回购协议,以便我成为下一个合并的对象?
- ios - 我是否坚持解决许多 ThreadSafeReferences 以将 Realm 与网络请求等异步任务一起使用?