(Django python)使用多个“for循环”进行渲染
嘿,伙计们,我正在使用Django python制作教育英语测试系统。 系统显示一篇文章和几个关于该文章的非固定问题。 每个问题都有可选择的项目,这些项目的编号不是固定的。 例如 {----第条---} {-----问题------} {-----项目----------------} {-----项目----------------} {-----项目----------------} {-----问题------} {-----项目----------------} {-----项目----------------} {-----项目----------------} 所以我定义了这样的模型:(Django python)使用多个“for循环”进行渲染,python,html,django,Python,Html,Django,嘿,伙计们,我正在使用Django python制作教育英语测试系统。 系统显示一篇文章和几个关于该文章的非固定问题。 每个问题都有可选择的项目,这些项目的编号不是固定的。 例如 {----第条---} {-----问题------} {-----项目----------------} {-----项目----------------} {-----项目----------------} {-----问题------} {-----项目----------------} {-----项目----
# Question DB
class Article(models.Model):
a_name = models.TextField(unique=True)
a_con = models.TextField() #Article Contents
class Question(models.Model):
q_name = models.TextField(unique=True)
q_a = models.ForeignKey(Article,on_delete=models.CASCADE)
q_con = models.TextField() #Question Contents
q_ans = models.TextField() #Question Correct Answer
class Item(models.Model):
i_q = models.ForeignKey(Question,on_delete=models.CASCADE)
i_seq = models.PositiveIntegerField() #Item Sequence
i_con = models.TextField() #Item Contents
# Image DB
class ArticleImage(models.Model):
ai_name = models.TextField(unique=True)
ai_a = models.ForeignKey(Article,on_delete=models.CASCADE)
ai_src = models.TextField()
class QuestionImage(models.Model):
qi_name = models.TextField(unique=True)
qi_q = models.ForeignKey(Question,on_delete=models.CASCADE)
qi_src = models.TextField()
class ItemImage(models.Model):
ii_name = models.TextField(unique=True)
ii_i = models.ForeignKey(Item,on_delete=models.CASCADE)
ii_src = models.TextField()
我这样写view.py:
def findQuestionbyArticle(article_name):
_ARTICLE_ = Article.objects.filter(a_name = article_name)
for a in _ARTICLE_:
_ARTICLE_IMAGE_ = ArticleImage.objects.filter(ai_a = a)
_QUESTION_ = Question.objects.filter(q_a = a)
_ITEM_ = {}
_ITEM_IMAGE_ = {}
for q in _QUESTION_:
_QUESTION_IMAGE_ = QuestionImage.objects.filter(qi_q = q)
_ITEM_[q] = Item.objects.filter(i_q = q)
for i in _ITEM_[q]:
_ITEM_IMAGE_[i] = ItemImage.objects.filter(ii_i = i)
return {
'article' : _ARTICLE_,
'article_image' : _ARTICLE_IMAGE_ ,
'question' : _QUESTION_,
'question_image' : _QUESTION_IMAGE_,
'item' : _ITEM_,
'item_image' : _ITEM_IMAGE_
}
<div class = "content-a">
<div class = "article">
{%for article in articles%}
<span>{{article.a_con}}</span>
{%for article_image in article_images%}
<img src = {{article_image.src}}>
{%endfor%}
{%endfor%}
</div>
{%for question in questions %}
<div class = "question">
<span>{{question.q_con}}</span>
{%for question_image in question_images %}
<img src = {{question_image.src}}>
{%endfor%}
{%for item in items[question] %}
<div class = "item">
<span>{{item.i_con}}</span>
{%for item_image in item_images%}
<img src = {{item_image[item].src}}>
{%endfor%}
</div>
{%endfor%}
</div>
{%endfor%}
</div>
我为模板编写了index.html,如下所示:
def findQuestionbyArticle(article_name):
_ARTICLE_ = Article.objects.filter(a_name = article_name)
for a in _ARTICLE_:
_ARTICLE_IMAGE_ = ArticleImage.objects.filter(ai_a = a)
_QUESTION_ = Question.objects.filter(q_a = a)
_ITEM_ = {}
_ITEM_IMAGE_ = {}
for q in _QUESTION_:
_QUESTION_IMAGE_ = QuestionImage.objects.filter(qi_q = q)
_ITEM_[q] = Item.objects.filter(i_q = q)
for i in _ITEM_[q]:
_ITEM_IMAGE_[i] = ItemImage.objects.filter(ii_i = i)
return {
'article' : _ARTICLE_,
'article_image' : _ARTICLE_IMAGE_ ,
'question' : _QUESTION_,
'question_image' : _QUESTION_IMAGE_,
'item' : _ITEM_,
'item_image' : _ITEM_IMAGE_
}
<div class = "content-a">
<div class = "article">
{%for article in articles%}
<span>{{article.a_con}}</span>
{%for article_image in article_images%}
<img src = {{article_image.src}}>
{%endfor%}
{%endfor%}
</div>
{%for question in questions %}
<div class = "question">
<span>{{question.q_con}}</span>
{%for question_image in question_images %}
<img src = {{question_image.src}}>
{%endfor%}
{%for item in items[question] %}
<div class = "item">
<span>{{item.i_con}}</span>
{%for item_image in item_images%}
<img src = {{item_image[item].src}}>
{%endfor%}
</div>
{%endfor%}
</div>
{%endfor%}
</div>
当然,它不起作用。。。
在这种情况下,我如何使它工作?
如果你有任何想法,请帮助我。。。这个问题困扰了我一个星期
编辑:
结果显示此错误页
首先,您可以看看您的语法。您在函数调用中重复出现错误,例如:
{%for article in article%} instead of {% for article in article %}
{%for question_image in question_images %} instead of {% for
{%endfor%} instead of {% endfor %}
请更正它们,然后重试。这可能有用。
对于这种情况,您可以在官方django文档中查看正确的标记格式。如果需要根据第一篇文章的选择更改选择器的其余内容,则需要在模板中使用Ajax从DB返回呈现的上下文。@ZarakiKenpachi感谢您的回复,如果我使用Ajax,我可以在我的页面中显示多个“for for循环”?你可以根据所选的文章来改变问题部分中显示的上下文。@ ZarakiKenpachi Ah understood,谢谢。如果我需要的话,我应该考虑使用。that@bdemirka我解决了这个问题,请参考这个主题谢谢!我已经离开座位了。。。我明天再查,我会告诉你结果的!非常感谢。这不是语法错误,您可以同时使用它way@bedemirka. 如果你说的是对的,对我来说是新的。我只是查看了django的官方文档。你会发现我的建议是正确的语法,根据我的经验,每当我按照你的建议格式化标记时,我都会弄糟。谢谢,但修复后会显示相同的错误。