2015-08-15 52 views
1

我目前工作的一个Django项目,我有当前的模型DTL - 如果没有声明比较是真的......不知道为什么

from django.db import models 

class Topic(models.Model): 

    def __str__(self): 
     return self.topic_text 

    topic_text = models.CharField(max_length=100) 


class Subtopic(models.Model): 

    def __str__(self): 
     return self.subtopic_text 

    topic = models.ForeignKey(Topic) 
    subtopic_text = models.CharField(max_length=100) 


class Question(models.Model): 

    def __str__(self): 
     return self.question_text 

    topic = models.ForeignKey(Topic) 
    subtopic = models.ForeignKey(Subtopic) 
    question_text = models.CharField(max_length=200) 
    mod_date = models.DateTimeField('date modified') 
    pub_date = models.DateTimeField('date published') 
    answer_text = models.TextField() 

传递通过我的意见后

def index(request): 
    question_list = Question.objects.all() 
    topic_list = Topic.objects.all() 
    subtopic_list = Subtopic.objects.all() 

    context = { 
     'topic_list': topic_list, 
     'subtopic_list': subtopic_list, 
     'question_list': question_list 
    } 
    return render(request, 'interview/index.html', context) 

而下面的模板

<ul> 
{% for topic in topic_list %} 
    <li><a href="/interview/{{ question.id }}/">{{ topic.topic_text}}</a></li> 
     {% for subtopic in subtopic_list %} 
      {{topic.topic_text}} , {{subtopic.topic}} 


**THIS HERE DOES NOT WORK** 

{% if subtopic.topic == topic.topic_text %} 
      <ul> 
       <li><a href="/interview/{{ question.id }}/">{{ subtopic.subtopic_text}}</a></li> 
      <ul> 
      {% endif %} 




      {% for question in question_list %} 
       <li><a href="/interview/{{ question.id }}/">{{ question.question_text }}</a></li> 
      {% endfor %} 
      </ul> 
     {% endfor %} 
</ul> 
{% endfor %} 
</ul> 

但是在if语句不工作就行了。当我将==更改为!=时,它会打印(错误的东西),所以我知道这不是我的语法,只是事实并非如此;然而,当我检查它

{{topic.topic_text}} , {{subtopic.topic}} 

Finance , Finance 
Finance , Coding 
Finance , Finance 
Coding , Finance 
Coding , Coding 
Coding , Finance 

我的想法是,DTL它像Java和你不能比较使用==串......但我无法找到任何有关DTL字符串比较独特。

回答

1

这是因为您正在比较对象与字符串。

您也可以从问题中删除第二个外键,因为您已经有一个指向Topic的副主题。

您将引用它是这样:

{{Question.Subtopic.Topic.topic_text}} 

它会给你同样的事情。

-1

您可以使用ifequal这个

{%如果subtopic.topic == topic.topic_text%}可以改成{%ifequal subtopic.topic topic.topic_text%}

谢谢应该解决您的问题https://docs.djangoproject.com/en/1.8/ref/templates/builtins/

+0

感谢您的回复!但是,这并没有解决它。根据Django文档。 ifequal是'=='的旧版本。显然ifequal将被弃用。 –

1

做进一步的测试后,我得到如下:

{% if topic.topic_text == 'Finance' %} 

结果为true

{% if subtopic.topic == 'Finance' %} 

计算结果为假

现在,我不是100%肯定的原因,但我想它与该subtopic.topic实际上是指向主题主键(其实做哪些不设置为topic_text),然后Django在与以下函数进行比较之后'隐藏'它。也许?我将对模型进行一些更改,并让你们知道。

def __str__(self): 
    return self.topic_text 

因此很明显,Django的输出是否因此发生了什么事是它比较topic.topic_text(字符串)subtopic.topic(对象),然后根据转变该对象到字符串之前的比较def __ str __函数我在上面输入。我通过执行以下操作来解决它:

{% if subtopic.topic.topic_text == topic.topic_text%} 
相关问题