DTL - 如果声明没有比较是真的......不知道为什么

时间:2015-08-15 00:33:12

标签: python django

我目前正在开发一个Django项目,我有当前的模型

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 个答案:

答案 0 :(得分:1)

进行额外测试后,我得到以下信息:

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

评估为真

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

评估为假

现在,我不是百分之百地确定原因,但我认为它与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%}