显示目录Django中的所有图像

舞狮

我不确定如何将目录中的图像显示到页面上。我正在尝试创建一个图库应用。我正在尝试一点一点地做到这一点。我的目标是为相册创建缩略图(照片的第一张图像)。单击相册后,应显示所有图像。我认为这将通过AJAX请求完成。不太确定,因为我是Web开发的新手。我需要一些帮助来进行设置。

图片结构:

/gallery
   /static
      /images
         /album1
            img1
         /album2
            img2
         ...etc

我不确定如何在我的views.py中获取这些图像并将其显示在html页面上。

这是我想出的models.py,但可能需要更多工作:

class Album(models.Model):
    title = models.CharField(max_length = 60)
    def __unicode__(self):
        return self.title

class Image(models.Model):
    title = models.CharField(max_length = 60, blank = True, null = True)
    tags = models.ManyToManyField(Tag, blank = True)
    albums = models.ManyToManyField(Album, blank = True)
    width = models.IntegerField(blank = True, null = True)
    height = models.IntegerField(blank = True, null = True)

我觉得我的Image类中可能缺少一些东西,例如ImageField或,FileField但是我将文件手动放在目录中,所以我不确定是否需要。

埃尔奇博士

在此阶段,不可能完全回答您的问题,但让我们看看。

答:目录和文件组织

尚不清楚目录结构如何与模型相似。

您的图像与相册之间存在N:M关系。到目前为止还可以。令人困惑的是您的图像结构。

该结构看起来像图像和相册的1:1关系。如果一张图像属于多个相册,是否会导致文件重复?

因此,您需要首先解决一件事:硬盘上的图像如何组织?

B:查找文件并从中创建URL

现在,我们需要找到一种方法来查找图像文件的路径。我们假设您的文件与django应用程序位于同一台计算机上,因此我们可以使用本地路径。如果您的图片位于AWS之类的其他位置,则需要提供其他机制来获取图片网址。

整理好之后,您可以为图像模型编写模型方法以检索图像路径。一种简单的方法是,标题是唯一的字段,并且确实等于图像文件名,该文件名也必须是唯一的。我向你保证,这仅适用于哈希文件名或非常奇怪的文件名约定,当文件上传到画廊时,这些约定必须由你自己来弥补。当然,还有其他选择可确保您获得正确的文件,但让我们保持简单,只是要记住一点。

C:一些示例代码

好吧,让我们写一些代码。这只是一个人为的例子,它想解释基本思想。有关目录遍历的更多信息,可以在这里找到:在Python中寻找类似于Java的文件遍历函数。

#models.py

import os
from os.path import join

class Image(models.Model):

def get_image_path(self):
    for root, dirs, files in os.walk('<parents of gallery>/gallery/static/images/<album_if_required>'):
       #debug information, just to get an idea how walk works.
       #currently we are traversing over all files with any extension
       print "Current directory", root
       print "Sub directories", dirs
       print "Files", files

       for file in files:
        if file.startswith(self.title):
            #now we have found the desired file.
            #value of file: "myimagetitle.jpg" <-- no path info
            #value of root: "/home/yourhome/gallery/static/images/myalbum"
            #we want to use this information to create a url based on our static path, so we need only the path sections past "static"
            #we can achieve this like so (just one way)
            mypath = os.sep.join(os.path.join(root, file).split(os.sep)[4:])

            #yields: /images/myalbum/myimagetitle.jpg

            return mypath

太好了,现在我们有了可以在模板中使用静态作为基础的路径。

#template.html
<!-- fancy html stuff goes here -->
<img src="{static myimage.get_image_path}">
<!-- more html -->

D:代码说明

我认为这段代码的某些部分需要解释。

os.walk是一个生成器方法,它将遍历您传递给它的路径。它将把路径返回到它查找的当前节点(根),以及您可以在下面找到的子目录(目录)和文件(文件)。您可以从树中删除节点或节点模式,因此可以对某些对象进行过滤。但是,这将立即进行。

找到文件候选者后,我们需要构建可在应用程序中使用的路径。HTML模板无法使用文件的物理位置,因此我们需要将其转换为URL。您将必须知道您的url方案是什么样的。我假设您依赖静态文件夹。

URL创建发生在这里:

os.sep.join(os.path.join(root, file).split(os.sep)[4:])

让我们看一下它:

  1. os.path.join(root, file) #加入根路径和一个长字符串的文件名

  2. .split(os.sep)[4:]#获取路径的子字符串。我们用目录分隔符char分隔路径,该分隔符是os依赖的。这将返回一个列表。我们只需要“静态”部分下的元素,在我的示例中,这导致列表的元素4

  3. os.sep.join(...)#最后但并非最不重要的一点是,我们必须再次构建一个字符串。因此,我们将所有列表元素与目录分隔符连接在一起,生成“ /images/myalbum/myimagetitle.jpg”

如您所见,这只是实现所需目标的一种可能方法。如果您提供有关文件组织方式的更多信息,我相信我们可以找到更好的方法。请不要上面的代码还没有准备好生产!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Firefox插件中显示目录浏览对话框

来自分类Dev

显示目录中的图像和文本文件中的文本

来自分类Dev

QTreeView显示目录

来自分类Dev

使用PHP在目录中显示所有图像

来自分类Dev

如何显示公共目录中的所有图像,我尝试此代码但没有图像显示

来自分类Dev

当单击按钮时显示目录中的下一张图像

来自分类Dev

有没有简单的方法来显示目录树中任何文件都不匹配的.gitignore规则?

来自分类Dev

Inno Setup:覆盖现有安装或显示目录提示

来自分类Dev

Eleventy网站如何显示目录中的页面列表?

来自分类Dev

命令“ ls -d”未显示目录。有没有办法让“ ls”仅显示目录而不是文件和目录?

来自分类Dev

显示目录中的.GIF

来自分类Dev

“如何使用ls命令显示目录'/ sbin'中以'az'开头的所有文件/目录?”

来自分类Dev

Django不显示媒体目录中的图像

来自分类Dev

Android Listview显示目录中的所有文件/文件夹

来自分类Dev

在Firefox插件中显示目录浏览对话框

来自分类Dev

ls -ls没有显示目录的真实大小

来自分类Dev

标签以显示目录内容

来自分类Dev

使用XSLT 2.0显示目录中的图像

来自分类Dev

为什么`find -xdev`在所有分区上都显示目录?

来自分类Dev

完整显示目录中的所有文件---但它们之间有一定间隔

来自分类Dev

管理员用户未在控制台提示符中显示目录路径,只有$

来自分类Dev

显示目录 Intellij Idea

来自分类Dev

使用 CMD 显示目录中所有 .txt 文件的内容

来自分类Dev

svn checkout 只显示目录结构,如何获取所有文件?

来自分类Dev

在列表中显示目录和内容的 Shell 脚本

来自分类Dev

我的图像未上传到本地 wamp 服务器中 codeigniter 中的特定目录,其显示目录不正确错误

来自分类Dev

有没有办法在windows cmd中更改cd后自动显示目录的内容?

来自分类Dev

列出所有文件而不显示目录(bash)

来自分类Dev

是否有 PowerShell 脚本显示目录中的文件并删除这些文件夹中的 .xml 文件

Related 相关文章

  1. 1

    在Firefox插件中显示目录浏览对话框

  2. 2

    显示目录中的图像和文本文件中的文本

  3. 3

    QTreeView显示目录

  4. 4

    使用PHP在目录中显示所有图像

  5. 5

    如何显示公共目录中的所有图像,我尝试此代码但没有图像显示

  6. 6

    当单击按钮时显示目录中的下一张图像

  7. 7

    有没有简单的方法来显示目录树中任何文件都不匹配的.gitignore规则?

  8. 8

    Inno Setup:覆盖现有安装或显示目录提示

  9. 9

    Eleventy网站如何显示目录中的页面列表?

  10. 10

    命令“ ls -d”未显示目录。有没有办法让“ ls”仅显示目录而不是文件和目录?

  11. 11

    显示目录中的.GIF

  12. 12

    “如何使用ls命令显示目录'/ sbin'中以'az'开头的所有文件/目录?”

  13. 13

    Django不显示媒体目录中的图像

  14. 14

    Android Listview显示目录中的所有文件/文件夹

  15. 15

    在Firefox插件中显示目录浏览对话框

  16. 16

    ls -ls没有显示目录的真实大小

  17. 17

    标签以显示目录内容

  18. 18

    使用XSLT 2.0显示目录中的图像

  19. 19

    为什么`find -xdev`在所有分区上都显示目录?

  20. 20

    完整显示目录中的所有文件---但它们之间有一定间隔

  21. 21

    管理员用户未在控制台提示符中显示目录路径,只有$

  22. 22

    显示目录 Intellij Idea

  23. 23

    使用 CMD 显示目录中所有 .txt 文件的内容

  24. 24

    svn checkout 只显示目录结构,如何获取所有文件?

  25. 25

    在列表中显示目录和内容的 Shell 脚本

  26. 26

    我的图像未上传到本地 wamp 服务器中 codeigniter 中的特定目录,其显示目录不正确错误

  27. 27

    有没有办法在windows cmd中更改cd后自动显示目录的内容?

  28. 28

    列出所有文件而不显示目录(bash)

  29. 29

    是否有 PowerShell 脚本显示目录中的文件并删除这些文件夹中的 .xml 文件

热门标签

归档