Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Iterate through a static image folder in django

Tags:

python

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.

like image 450
learner Avatar asked May 17 '16 07:05

learner


People also ask

How static images are served in Django?

Configuring static files Make sure that django.contrib.staticfiles is included in your INSTALLED_APPS . In your templates, use the static template tag to build the URL for the given relative path using the configured STATICFILES_STORAGE . Store your static files in a folder called static in your app.

Where is static folder in Django?

This means that all static files will be stored in the location http://127.0.0.1:8000/static/ or http://localhost:8000/static/ . And if you wanted to access the base. css file its location would be http://127.0.0.1:8000/static/base.css or http://localhost:8000/static/base.css .

What does {% %} mean in Django?

{% %} and {{ }} are part of Django templating language. They are used to pass the variables from views to template. {% %} is basically used when you have an expression and are called tags while {{ }} is used to simply access the variable.

What is Forloop counter in Django?

A for loop is used for iterating over a sequence, like looping over items in an array, a list, or a dictionary.


2 Answers

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"))
like image 181
Daniel Roseman Avatar answered Oct 11 '22 05:10

Daniel Roseman


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 %}
like image 36
Josh Mitton Avatar answered Oct 11 '22 05:10

Josh Mitton