#1 by Blissong1215
Hello everyone,
I attempted to include images within radio button choices by following the example provided in this link: https://s3.amazonaws.com/otreehub/browsable_source/1e38462b-46c7-4ca1-bca5-536462f90131/image_choices/index.html.
However, I encountered an error message that reads "FileNotFoundError: static/positionA6.png."
To provide more clarity, I inserted two images, namely "positionA6" and "positionB6," into the static folder (you can refer to the screenshot of the "static.png"). To achieve this, I used the following code:
In '_init_.py':
from otree.api import *
def make_image_data(image_names):
return [dict(name=name, path='static/{}'.format(name)) for name in image_names]
class Constants(BaseConstants):
name_in_url = 'choice_images'
players_per_group = None
num_rounds = 1
...
class Player(BasePlayer):
img_choice = models.StringField()
# PAGES
class MyPage(Page):
form_model = 'player'
form_fields = ['img_choice']
@staticmethod
def vars_for_template(player: Player):
image_names = [
'positionA6.png',
'positionB6.png',
]
return dict(image_data=make_image_data(image_names))
...
In 'MyPage.html':
<p>Choose your favorite image.</p>
{{ for image in image_data }}
<label style="text-align: center">
<img src="{{ static image.path }}" width="200px">
<br>
<input type="radio" name="img_choice" value="{{ image.name }}" class="persist">
</label>
{{ endfor }}
{{ formfield_errors 'img_choice' }}
<br>
{{ next_button }}
<script src="{{ static 'persist-raw.js' }}"></script>
Could someone please assist me in identifying where I should make revisions to the code? Your help is greatly appreciated!
Sincerely,
Jian
#2
by
BonnEconLab
If you put the images in _static/global, then you need to use
def make_image_data(image_names):
return [dict(name = name, path = 'global/{}'.format(name)) for name in image_names]
That is, simply replace 'static/{}' by 'global/{}'.
See also the recommendations
https://otree.readthedocs.io/en/latest/misc/advanced.html#static-files. If you follow these recommendations and put the images in a folder _static/your_app_name or in a local folder, i.e., your_app_name/static/your_app_name, then you need to use
def make_image_data(image_names):
return [dict(name = name, path = 'your_app_name/{}'.format(name)) for name in image_names]
#3 by Blissong1215
Yes, the solution worked once I made the necessary path revisions. Thank you! Sincerely, Jian