Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅为数据库中要循环通过的行返回查询集_Python_Django_Python 3.x_Django Views - Fatal编程技术网

Python 仅为数据库中要循环通过的行返回查询集

Python 仅为数据库中要循环通过的行返回查询集,python,django,python-3.x,django-views,Python,Django,Python 3.x,Django Views,我有两个相同大小的元素列表,我想加入它们,然后输出到Django模板 但是我在识别行时遇到了问题,所以只能打印该行 我正在尝试压缩这两个列表,然后创建一个新列表,该列表将循环到模板页面上 当我在模板上使用变量时,就像下面的代码一样,它工作得很好,但我希望能够在列表中循环 我知道这是不正确的,因为并非所有元素都打印到模板中,但它会创建所需的结果 <p> {{ news.esp_article.0 }}</p>

我有两个相同大小的元素列表,我想加入它们,然后输出到Django模板

但是我在识别行时遇到了问题,所以只能打印该行

我正在尝试压缩这两个列表,然后创建一个新列表,该列表将循环到模板页面上

当我在模板上使用变量时,就像下面的代码一样,它工作得很好,但我希望能够在列表中循环

我知道这是不正确的,因为并非所有元素都打印到模板中,但它会创建所需的结果

                    <p> {{ news.esp_article.0 }}</p>
                    <p> {{ news.eng_article.0 }}</p>
                    <hr>
                    <p> {{ news.esp_article.1 }}</p>
                    <p> {{ news.eng_article.1 }}</p>
                    <hr>
                    <p> {{ news.esp_article.2 }}</p>
                    <p> {{ news.eng_article.2 }}</p>
                    <hr>
                    <p> {{ news.esp_article.3 }}</p>
                    <p> {{ news.eng_article.3 }}</p>
                    <hr>
                    <p> {{ news.esp_article.4 }}</p>
                    <p> {{ news.eng_article.4 }}</p>
然后我得到数据库中每一行的完整原始数据

这是我的模板文件:

 {% for text1, text2 in zip_scripts %}

     <p>{{ text1 }}</p>
     <p>{{ text2 }}</p>                           

 {% endfor %}

谢谢

您需要添加一个简单的代码来修复查询集。值列表返回一个元组。为了让它返回一个列表,您需要添加flat=True

试试这个:

eng_articles = Newspapers.objects.values_list('eng_article', flat=True) 
esp_article =  Newspapers.objects.values_list('esp_article', flat=True)

在查询集中,您应该使用获取一个dict列表,其中每个dict对应于数据库中的一行。然后,在模板中,可以使用访问每行的单个列值

views.py:

类ArticleViewPageDetailView: 模型=报纸 模板名称='rtves/article.html' 上下文\对象\名称='news' def get_context_dataself,**kwargs: eng_articles=报纸.对象.值'eng_articles' esp\u文章=报纸.对象.值'esp\u文章' zip_scripts=Zippeng_文章,特别是文章 上下文=超级。获取上下文数据**kwargs context.updatezip_scripts=zip_scripts 返回上下文 rtves/article.html:

{article_eng的百分比,article_esp在zip_脚本中的百分比} {{article_eng.text}

{{article_esp.text}

{%endfor%} 我不确定你的models.py是什么样子。您是为一家报纸还是所有报纸获取英文和西班牙文相关文章的列表?注意:使用单数名词作为模型名称,即报纸末尾不带s。

您在顶级列表上运行zip,报纸查询设置在列表列表列表中,而不是两个文章列表—英语文章和esp文章

这是假设ArticleViewPage一次只能显示一份报纸的英文和西班牙文文章

作为替代解决方案,您可以不在视图的get_context_data方法中压缩文章,而是在模型上提供压缩的文章,如下所示:

类新闻纸模型。模型: esp_articles=ArrayFieldmodels.CharFieldmax_length=8000,blank=True eng_articles=ArrayFieldmodels.CharFieldmax_length=8000,blank=True @财产 def articles_zippedself: 返回zipself.esp_文章、self.eng_文章 并更新模板以使用新模型属性:

{% for article_spanish, article_english in news.articles_zipped %}
  <p>{{ article_spanish }}</p>
  <p>{{ article_english }}</p>
{% endfor %}

谢谢,但这不起作用,我以前试过。谢谢,但没有使用值返回任何内容,我尝试了一些不同的方法。我已经更新了我的问题,因为我的模型是数组集。谢谢Models.py。我已经创建了另一个答案:非常感谢,这已经解决了问题,请您将我链接到可能有您使用的文档的地方。标题是模板上的@属性,以便我可以了解更多有关它的信息。再次感谢。我很高兴它起作用了!编辑并删除了.title,但不应包含它们。@property decorator将该方法转换为getter,在python代码中很有用,但在Django模板中访问时并不一定需要。详情如下:
class Newspapers(models.Model):

   esp_article = ArrayField(models.CharField(max_length=8000, blank=True))**
   eng_article = ArrayField(models.CharField(max_length=8000, blank=True))**
eng_articles = Newspapers.objects.values_list('eng_article', flat=True) 
esp_article =  Newspapers.objects.values_list('esp_article', flat=True)
class ArticleViewPage(DetailView):
    model = Newspapers
    template_name = 'rtves/article.html'
    context_object_name = 'news'

    def get_context_data(self, **kwargs):
        zip_scripts = zip(self.object.eng_articles, self.object.esp_articles)

        context = super().get_context_data(**kwargs)
        context.update(zip_scripts=zip_scripts)
        return context
{% for article_spanish, article_english in news.articles_zipped %}
  <p>{{ article_spanish }}</p>
  <p>{{ article_english }}</p>
{% endfor %}