Python图像显示Django

时间:2010-07-12 12:08:01

标签: python django image

自我上次提问以来:Python images display

我明白,从我得到的所有答案中,glob.glob可能是我需要的唯一方向。

然而我现在被困在哪里就在这里:

我可以使用glob.glob创建一个包含媒体目录中所有文件名的列表:

all = glob.glob("/Path_to_MEDIA/*/*.jpg")

但是如何使用它并创建一个非常简单的图像显示,其中一个下一个按钮调用我的MEDIA_ROOT中的文件并显示它们。

我所知道的是:

  1. 我有一个看起来像默认目录索引的模板:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
      <head>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
        <meta http-equiv="Content-Language" content="en-us" />
        <meta name="robots" content="NONE,NOARCHIVE" />
        <title>Index of {{ directory }}</title>
      </head>
      <body>
        <h1>Index of {{ directory }}</h1>
        <ul>
          {% ifnotequal directory "/" %}
          <li><a href="../">../</a></li>
          {% endifnotequal %}
          {% for f in file_list %}
          <li><a href="{{ f|urlencode }}">{{ f }}</a></li>
          {% endfor %}
        </ul>
      </body>
    </html>
    
  2. 我需要在视图中创建一个def,将glob.glob中的列表提供给此模板或类似模板。

  3. 我不知道的事情:

    • 视图中的def如何看起来像?

    在这里:

    • 我需要编写什么才能在浏览器中显示一个图像,声音?
    • 我需要写什么才能显示图像,声音的列表?

    感谢您的时间!

1 个答案:

答案 0 :(得分:0)

在urls.py中创建带有额外上下文的直接模板网址:

from django.views.generic.simple import direct_to_template
...
url(r'^whatever', direct_to_template, 
                 { 'template':'foo.html', 'extra_context': {'files':myfiles} }
                 name='whatever' ),

上面的 myfiles 是您文件的列表/元组。但是,请确保使用MEDIA_URL格式化文件列表,而不是基于MEDIA_PATH。例如:

myfiles = [ 'relative/path/foo.jpg', 
            'http://static.mysite.com/absolute/path/bar.jpg' ]

虽然显然是从您的案例中的文件系统生成的,但不是硬编码列表。你可以在视图中完成工作,而不是使用直接模板 - 只需确保将文件键/值放入上下文中:

def myview( request ... ):
  context = RequestContext(request)
  context[files]=myfiles
  return render_to_respone( ..., context_instance=context )

然后,在您的模板 foo.html

{% for file in files %}
  <img src='YOUR_MEDIA_URL_HERE/{{ file }}' />
{% endfor %}