我目前正在开发一个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字符串比较的独特信息。
答案 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%}