如何渲染列表中的项目dd = []从模板中的函数get_image返回?该列表包含函数返回的文件列表。
只是喜欢添加index.html在project_folder / inc / html下,其中的图像位于project_folder / inc / img&设置,视图和url在project_folder中
的index.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%'
views.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)
url.py
urlpatterns = patterns('',
url(r'^$', get_image),
settings.py
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
TEMPLATE_DIRS = (
os.path.join(PROJECT_ROOT, "inc/html"),
)
答案 0 :(得分: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 %}
{{% varible %}}
views.img_dir
?你已经在你的中定义了它
views.py
我假设,但它永远不会传递给模板。因此,您将无法views.img_dir
。 (除非你做过一些超级魔法,否则你没有向我们展示)views.img_dir.object
无法呈现。views.img_dir.object
将永远无法工作(假设您已将对象传递给模板),因为它是一个字符串,并且字符串永远不会形成属性object
形成for循环。 正如您所看到的,您的代码中存在多个错误,您将无法使用该错误渲染图像。
答案 1 :(得分:0)
我确实改变了从django到Jinja2的模板:&amp;在我的功能中进行了小小的改变,我能够在模板上渲染所有图像。
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上获取它,那么这里是片段:
VIEWS.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))
的index.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呈现图像的名称。