如何从django模板中的变量访问上下文值

时间:2017-12-08 17:32:38

标签: django django-templates

我有一个问题模型,我将其作为上下文传递给模板

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,它将显示连接的字符串,而不尝试在上下文中获取值。

任何人都知道如何实现这个目标?

1 个答案:

答案 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)

我希望它有所帮助!