learner
learner

Reputation: 4818

Iterate through a static image folder in django

I am trying to get all image link present in a folder. Currently, I am assigning the link manually. But, I want my django to get all images from a specific folder irrespective of their names.

<li>
   <a href="{% static "styles/jamia/1.jpg" %}"  rel="prettyPhoto[gallery1]"><img src="{% static "styles/jamia/1.jpg" %}"></a>
</li> 

<li>
  <a href="{% static "styles/jamia/2.jpg" %}"  rel="prettyPhoto[gallery1]"><img src="{% static "styles/jamia/2.jpg" %}"></a>
</li>

I am looking for something like:

{% for file in {% static "styles/jamia/" %}  %}
    <img src="{{file}}" alt="">
{% endfor %}

All images are present in jamia folder.

Upvotes: 9

Views: 3997

Answers (2)

Josh Mitton
Josh Mitton

Reputation: 151

This seems to have been answered in parts before, but probably requires some searching for all the answers. So in an attempt to provide a complete answer to this questions in one place:

In views.py you would want to do something like the other answer says:

context_dict = {}
files = os.listdir(os.path.join(settings.STATIC_DIR, "styles/jamia/"))
context_dict['files'] = files
return render(request, 'home.html', context=context_dict)

Then in your html template you can loop over your images. In addition, we make use of with to join the root to the static file with those names pulled out in the views.py, but you could have concatenated the whole path in views and not needed with. So, in home.html:

{% for file in files %}
    {% with 'images/'|file as image_static %}
        <img src="{% static image_static %}" alt="">
    {% endwith %}
{% endfor %}

Upvotes: 2

Daniel Roseman
Daniel Roseman

Reputation: 599490

This isn't something Django has built in. But Django is just Python, and you can use normal Python file functions to get your list in the view:

files = os.listdir(os.path.join(settings.STATIC_ROOT, "styles/jamia"))

Upvotes: 9

Related Questions