Django模块在模板上过滤

时间:2014-03-19 09:43:59

标签: python django django-models django-templates django-views

我为我的英语道歉。 我是Django的新面孔,做我的第一个应用程序,同时学习。 路上有一些泵,但到目前为止,这是一个令人愉快的旅程。

我正在做的应用程序将是一份调查问卷。 我们的想法是,您可以在管理面板下添加新问题,然后在网站上访问者可以回答问题以便反馈。

我想从头开始学习它。

我制作了一个由两部分组成的模型:问号和问题本身。 我想知道如何防止在模板中两次创建相同的问号标签。具有相同标签名称的所有问题应显示在一个问号标签下,而不是自身重复。

我会表明我的意思: 首先是代码:

model.py

class QuestionTag (models.Model):
  tag_name = models.CharField(max_length=55)
  tag_description = models.CharField(max_length=200, blank=True)

  def __unicode__(self):
      return u'%s %s' % (self.tag_name, self.tag_description)

class Question (models.Model):
  QUEST_GROUP_NAME = (
      (1, 'Group1'),
      (2, 'Group2'),
  )
  question_group = models.IntegerField(max_length=3, choices=QUEST_GROUP_NAME, blank=False, default=1)
  question_tag = models.ForeignKey('QuestionTag')
  question_box = models.TextField()

  class Meta:
      ordering = ['-question_tag']

view.py

class QuestionView(ListView, FormView):

    def get(self, request, person_id=1):

        if not person_id:
            return render(request, '404.html')

        try:
            personbyid = Person.objects.get(pk=person_id)
            questions = Question.objects.filter(question_group=1).order_by('question_tag')

        except Person.DoesNotExist:
            return render(request, '404.html')

        return render_to_response('questions.html',
                {'personbyid ': inetrviewerid ,'Question_group1': questions })

和模板:

<form id='formID' action='' method='post' autocomplete="off">{% csrf_token %}

        {% for question in Question_group1 %}
          <div class='question_header'>
             <p class='question_tag'>.{{question.question_tag.tag_name}}</p>
             <p class='question_tag_descript'>({{question.question_tag.tag_description}})</p>
          </div>
      <label class="question_quest">{{question.question_box}}</label>
      <textarea name="answer" placeholder="Some text about the question!" rows="3"></textarea>
    {% endfor %}

 </form>

到目前为止我所拥有的是:

-question标签(描述)

---问题一?

--- textarea的

-question标签(描述)

---问题二?

--- textarea的


我怎么能让问题看起来像这样:

-question标签(描述)

---问题一?

--- textarea的

---问题二?

--- textarea的

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用ifchanged模板标记:

{% for question in Question_group1 %}
    {% ifchanged question.question_tag %}
      <div class='question_header'>
         <p class='question_tag'>.{{question.question_tag.tag_name}}</p>
         <p class='question_tag_descript'>({{question.question_tag.tag_description}})</p>
      </div>
    {% endifchanged %}
  <label class="question_quest">{{question.question_box}}</label>
  <textarea name="answer" placeholder="Some text about the question!" rows="3"></textarea>
{% endfor %}

现在只有在question_tag发生变化时才会输出ifchanged块的内容。