0

如何渲染模板中函数get_image返回的列表dd = []中的项目?该列表包含函数返回的文件列表。

只是想添加 index.html 在 project_folder/inc/html 下,其中图像在 project_folder/inc/img & settings 下,views & url 在 project_folder

索引.html

<ul>
{% for object in dd %}
<li><img src="views.img_dir{{% views.img_dir.object.get_absolute_url %}}"></li>
<li><img src="views.img_dir{{% views.img_dir.dd.get_absolute_url %}}"></li>
{% endfor %}
</ul>

如果我试试这个:

<ul>
{% for object in dd %}
<li><img src="{{settings.img_dir }}object.get_absolute_url"></li>
<li><img src="{{settings.img_dir }}{{%object%}}"></li>
{% endfor %}
</ul>

我得到一个 TemplateSyntaxError无法解析剩余部分:来自 '%object%' 的 '%object%'

视图.py

SETTINGS_PATH = os.path.normpath(os.path.dirname(__file__))
img_dir = os.path.join(SETTINGS_PATH, "inc/img/")

def get_image(request):
    for file in os.listdir(img_dir):
        h = []
        h.append(file)
        for l in h:
            r = l.endswith('.jpg') or l.endswith('.png') or l.endswith('.gif')
            if r == True:
                dd = []
                dd.append(l)
                return render_to_response('index.html', dd)

网址.py

urlpatterns = patterns('',
    url(r'^$', get_image),

设置.py

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))

TEMPLATE_DIRS = (
    os.path.join(PROJECT_ROOT, "inc/html"),
)
4

2 回答 2

1

您的模板语法错误。

你不能使用{{ %variable% }},它要么是{{ variable }}要么{% function %}

<li><img src="{{settings.img_dir }}{{%object%}}"></li>

应该

<li><img src="{{settings.img_dir }}{{ object }}"></li>

您提供的第一个块也有多个错误

{% for object in dd %}
    <li><img src="views.img_dir{{% views.img_dir.object.get_absolute_url %}}"></li>
    <li><img src="views.img_dir{{% views.img_dir.dd.get_absolute_url %}}"></li>
{% endfor %}
  1. {{% varible %}}
  2. 是什么views.img_dir?你已经在你的 views.py假设中定义了它,但它永远不会传递给模板。因此你将无法做到views.img_dir。(除非你做了一些超级魔法,否则你不会向我们展示)
  3. 这导致views.img_dir.object无法渲染。
  4. 最后,views.img_dir.object将永远不会工作(假设您已将对象传递给模板),因为它是一个字符串,而字符串永远不会具有object形成您的 for 循环的属性。

如您所见,您的代码中有多个错误,您将永远无法使用它来渲染图像。

于 2013-09-02T18:36:53.440 回答
0

我确实将我的模板从 django 更改为 Jinja2: & 通过对我的功能进行一点更改,我能够渲染模板上的所有图像。

JINJA2 模板

这是功能:

SETTINGS_PATH = os.path.normpath(os.path.dirname(__file__))
img_dir = os.path.join(SETTINGS_PATH, "inc/img")

class ImageHandler(webapp2.RequestHandler):
    def get(self):
        images = os.listdir(img_dir)
        template = jinja.get_template('image.html')
        template_values = {'images': images}
        self.response.write(template.render(template_values))

的HTML:

<ul>
{% for img in images %}

    <li><img src="/img/{{ img|e  }}"></li>

{% endfor %}
</ul>

我也得到了一个片段来渲染 Django 中的所有图像,但我改变了我的模板系统。

如果有人需要在 Django 上获取它,这里是代码段:

意见.PY

def index(request):
    """Renders the index for the site."""
    images = os.listdir(templates)
    images.sort()
    for i in xrange(len(images)):
        name = name_for_image(images[i])
        images[i] = (name, images[i])
    return shortcuts.render_to_response('index.html',
                                        {'images': images,},
                                        template.RequestContext(request))

索引.html

{% for name, image in images %}
<td>
  <a href="{% url caption fn=image %}">
    <img src="{% url thumbnail fn=image %}"/><br/>{{ name }}
  </a>
</td>
{% if forloop.counter|divisibleby:5 %}</tr><tr>{% endif %}
{% endfor %}

注意:上面的 Django 代码需要一些调整,因为它还依赖于另一个名为的函数def name_for_image(image):,该函数使用 img src 呈现图像的名称。

于 2013-09-15T04:07:52.957 回答