我有一个问题模型,我将其作为上下文传递给模板
class Question(models.Model):
possible_answer1 = models.TextField(
'Possible Answer 1',
max_length=1000,
default='none'
)
possible_answer2 = models.TextField(
'Possible Answer 2',
max_length=1000,
default='none',
blank=True
)
possible_answer3 = models.TextField(
'Possible Answer 3',
max_length=1000,
default='none',
blank=True
)
possible_answer4 = models.TextField(
'Possible Answer 4',
max_length=1000,
default='none',
blank=True
)
possible_answer5 = models.TextField(
'Possible Answer 5',
max_length=1000,
default='none',
blank=True
)
possible_answer6 = models.TextField(
'Possible Answer 6',
max_length=1000,
default='none',
blank=True
)
如果我使用
,我可以访问所有答案对象没问题{{ context.this_question.question.possible_answer1 }}
{{ context.this_question.question.possible_answer2 }}
.
.
{{ context.this_question.question.possible_answer6 }}
问题在于我不需要一直显示所有6个答案所以我试图构建for循环,只能在某个时间基于以下线程使用with来显示我需要的东西标记How to concatenate strings in django templates? 1。在下面的示例中,mylist包含四个元素,所以我尝试了这个
{% for x in mylist %}
{% with possible_answer='context.this_question.question.possible_answer'|add:forloop.counter %}
{{ possible_answer }}
{% endwith %}
{% endfor %}
希望它会产生
{{ context.this_question.question.possible_answer1 }}
{{ context.this_question.question.possible_answer2 }}
{{ context.this_question.question.possible_answer3 }}
{{ context.this_question.question.possible_answer4 }}
并因此显示上下文对象中的相应项目,就像我自己键入它一样,但它不起作用。什么都没有显示
如果用任何字符串替换forloop.counter,它将显示连接的字符串,而不尝试在上下文中获取值。
任何人都知道如何实现这个目标?
答案 0 :(得分:0)
在视图中更好地生成这种逻辑。您可能还需要重新考虑您的数据库架构。当我遇到这种问题时,我最好创建两种不同的模型。
例如问题模型和答案模型。 Answer模型将具有问题模型的外键,然后使用简单的过滤器获得与该问题相关的所有答案。它是SQL数据库的简单编程范例。
models.py
class Question(models.Model):
Body = models.TextField(max_length=1000,default='none',blank=True)
class Answer(models.Model):
Question = models.ForeignKey(Question)
Body = models.TextField(max_length=1000,default='none',blank=True)
views.py:
Q = Question.objects.get(pk='id')
A = Answer.objects.filter(Question=Q)
我希望它有所帮助!