【问题标题】:(Django python) Using multiple 'for loop' for render [duplicate](Django python)使用多个“for循环”进行渲染[重复]
【发布时间】: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 我解决了这个问题,请参阅这个主题谢谢! stackoverflow.com/questions/8000022/…

标签: python html django


【解决方案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/…。您会看到我提出的是正确的语法,根据我的经验,每当我按照您的建议格式化标签时,我都会搞砸。
  • 谢谢,但修复后显示同样的错误。
猜你喜欢
  • 2017-12-30
  • 1970-01-01
  • 2019-05-08
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 2021-08-04
  • 2014-07-10
相关资源
最近更新 更多