【问题标题】:django - strange template loop failure between dev/prod environmentdjango - 开发/生产环境之间的奇怪模板循环失败
【发布时间】:2009-11-04 07:51:15
【问题描述】:

我正在为需要图片库的网站开发 django 应用程序。由于该站点相当简单,我选择不使用数据库。在画廊部分,我在视图中有一个循环,它从图像文件夹中读取所有图像文件,并将它们发送到模板,它们在循环中呈现:

import os
from django.shortcuts import render_to_response

def show_pics(request):
    """sends a list of files to the view"""
    folder = '/static/images'
    files = [os.path.join(folder, f) for f in os.listdir(folder) if '.jpg' in f]
    return render_to_response('gallery.html', { 'files' : files })

和模板:

<div id="gallery">
    {% for file in files %}
        <img src="{{ file }}" class="gallery-image" />
    {% endfor %}
</div>

这在开发模式下效果很好(我设置了 url 以在“/static/”下提供静态文件),但是当我上传到我的网络服务器时,图像不会被渲染。当我查看呈现的 html 时,这就是我得到的:

<div id="gallery">  </div>

我通过尝试通过静态 url - http://mysite.com/static/images/some_image.jpg 访问一些随机图片来确保静态 url 在网络服务器上工作,并且 css 肯定可以工作(别担心,我将使用单独的服务器进行静态稍后文件)。我可能应该说生产服务器正在运行 python2.5 而我正在运行 2.6(两者都有 django 1.1)。有什么想法吗?

【问题讨论】:

    标签: django development-environment production-environment


    【解决方案1】:

    假设files 在模板中为空是安全的。您可以通过在模板中输入{{ files }} 来确认这一点并查看它打印的内容。很可能,什么都没有。

    但是,这可能存在一些问题:

    folder = '/static/images'
    files = [os.path.join(folder, f) for f in os.listdir(folder) if '.jpg' in f]
    

    首先,os.listdir 采用的路径不是来自文档根目录的路径,而是来自文件系统根目录的路径。那么如果你在服务器上做ls /static/images,它会显示什么?

    作为一件小事,我更喜欢使用f.endswith('.jpg')

    【讨论】:

    • 这是有道理的,我实际上在列表理解之前进行了 if os.path.isdir(folder) 检查,我想它没有超过那个点。不过你是对的,它确实指向服务器的根目录,而不是我的应用程序目录 - 也许我最终会使用数据库......谢谢!
    【解决方案2】:

    我猜原因是您的文件列表为空。您是否检查过您的 django 应用可以访问 /static/images 文件夹?

    【讨论】:

      猜你喜欢
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 2012-12-10
      • 2018-06-04
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      相关资源
      最近更新 更多