我有以下表格:
class QuizForm(forms.Form):
def __init__(self, *args, **kwargs):
questions = kwargs.pop('questions')
super(QuizForm, self).__init__(*args, **kwargs)
for q in questions:
answers = [ans.Answer for ans in q['w_answers']]
answers += [q['question'].CorrectAnswer]
self.fields['question_%d' % q['question'].id] = \
forms.ChoiceField(
label=q['question'].QuestionText, required=True,
choices=[(ans, ans) for ans in answers],
widget=forms.RadioSelect)
def answers(self):
for name, value in self.cleaned_data.items():
if name.startswith('question_'):
yield (name.split('_')[1], value)
此表单的结果基本上是一个问题列表,每个问题都有一些错误的答案和一个正确答案(HTML <ul>
在<ul>
内)。
我的一个模型是Question
模型:
class Question(models.Model):
def _image_path(instance, filename):
return 'images/%s' % filename
Course = ForeignKey(Course, on_delete=models.CASCADE)
QuestionText = CharField(max_length=200)
CorrectAnswer = CharField(max_length=200)
Image = ImageField(max_length=200, blank=True, null=True,
upload_to=_image_path)
class Meta:
unique_together = (('Course', 'QuestionText'),)
def __str__(self):
return self.QuestionText
正如您所看到的,我的模型中有ImageField
,但我不知道如何显示它。
如何显示QuestionText
和Image
?
提前致谢。
修改:模板的相关部分:
<form method="POST" action=".">{% csrf_token %}
<ul>
{% for field in form %}
<li>
{{ field.errors }}
{{ field.label_tag }}<br />
{% if field.Image %}
<img src="{{ field.Image }}"><br>
{% endif %}
{% for q in field %}
{{ q }}<br />
{% endfor %}<br />
</li>
{% endfor %}
</ul>
<input type="submit" value="Submit" />
</form>
答案 0 :(得分:0)
从我看到你可以做一个upload_to='images/'
,你就可以访问这样的图像:
{% if field.Image %}
<img src="{{ field.Image.url }}"><br>
{% endif %}
请注意,使用小写字母命名字段(图像不是图像等)更好。
此处的实例是一个问题实例,图片是您的字段(我低调),而网址是您的服务图片的路径。
修改强> 我已经编辑了我的答案,但请再次更改这些档案名称!图像不是图像。
答案 1 :(得分:0)
我没有找到实际的解决方案,所以我试图即兴创作。
最终我想出了将HTML本身作为标签传递:
my_label = q['question'].QuestionText
try:
my_label += '<br /><img src="' + q['question'].Image.url + '">'
except ValueError:
pass
my_label = mark_safe(my_label)
self.fields['question_%d' % q['question'].id] = \
forms.ChoiceField(
label=my_label, required=True,
choices=[(ans, ans) for ans in answers],
widget=forms.RadioSelect)
从模板中删除以下部分:
{% if field.Image %}
<img src="{{ field.Image }}"><br>
{% endif %}
请随意发布合法的解决方案。