(Django python)使用多个“for循环”进行渲染[重复]

Posted

技术标签:

【中文标题】(Django python)使用多个“for循环”进行渲染[重复]【英文标题】:(Django python) Using multiple 'for loop' for render [duplicate] 【发布时间】:2020-12-26 21:09:09 【问题描述】:

大家好,我正在使用 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_
    

我为这样的模板编写了 index.html

<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>

当然,它不起作用...... 在这种情况下,我怎样才能让它工作? 如果您有任何想法,请帮助我...这个问题困扰了我一周...

编辑:

结果显示此错误页面。

【问题讨论】:

如果您需要根据第一篇文章选择更改其余选择器内容,那么您需要在模板中使用 Ajax 从数据库返回呈现的上下文。 @ZarakiKenpachi 感谢您的回复,您的意思是如果我使用 Ajax 我可以在我的页面中显示多个“for 循环”吗? 您可以根据所选文章更改问题部分中显示的上下文。 @ZarakiKenpachi 嗯明白了,谢谢如果我需要我应该考虑使用那个 @bdemirka 我解决了这个问题,请参阅这个主题谢谢! ***.com/questions/8000022/… 【参考方案1】:

首先,您可以看看您的语法。您在函数调用中犯了一个重复的错误,例如:

%for article in article% instead of % for article in article %
%for question_image in question_images % instead of  % for  
%endfor% instead of % endfor %

更正它们并重试。它可能会起作用。 对于这种情况,您可以在官方djangodocumentation中查看正确的标签格式。

【讨论】:

我已经离开座位了……我明天去看看,我会告诉你结果!谢谢! 这不是语法错误,你可以同时使用它 @bedemirka。如果你说的对我来说是新的。我只是查看官方 django 文档docs.djangoproject.com/en/3.1/topics/templates/…。您会看到我提出的是正确的语法,根据我的经验,每当我按照您的建议格式化标签时,我都会搞砸。 谢谢,但修复后显示同样的错误。

以上是关于(Django python)使用多个“for循环”进行渲染[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 模板中使用 for 循环显示多个 chart.js 图表

在Django模板中使用for循环显示多个chart.js图表

使用 For 循环的 Django Python 模板嵌套列表

无法在 Django 模板文件的 for 循环中使用条件标签

Python Django - 模型:查询/过滤器中的 for 循环

如何优化 FOR 循环下存在的数据库调用(平台:Django、Python、Postgres)[重复]