【问题标题】:Template cannot evaluate database queryset django模板无法评估数据库查询集 django
【发布时间】:2020-01-22 13:44:51
【问题描述】:

我正在解决这个有线问题。我希望我能描述得很好。

案例:

假设我有以下类型或标识符:

classes = ['classa','classb','classc','classd']

对于上述每个类,我也有这两个子类:

subclasses = ['suba','subb']

现在,我将使用我的模型名称 get_data_filtered(a,b) 中的函数从过滤这些类和子类的数据库中检索数据点,如下所示:

context['custom-data'] = (
            {c: {subc: self.get_object().get_data_filtered(c,subc)} for c in
             classes for subc
             in subclasses})

在视图级别将此上下文打印到控制台时,一切都很好。但是,将它传递给模板并在那里访问它时,不会检索到任何数据!

使用 Django 调试工具栏查看模板时,模板上下文显示如下:

context['custom-data']:'<<triggers database query>>'

模板级别的语法类似于:

{% for i in custom-data.classa.suba %}
    ....
{% endfor %}

我的分析

我认为查询集从未以这种方式进行评估。我还尝试输入.all() 和list(...),但没有任何用处!

查询集可以这样评估吗?

如果有更好的方法来完成这样的任务,请指教。

Django 版本:2.2

【问题讨论】:

  • get_data_filtered 长什么样子?
  • @Alex,这只是filter 对模型对象的一个​​声明。
  • 那没有帮助;提供代码,因为大多数用户没有时间想象代码
  • @Moha369,整篇文章可以归结为以下问题:模板是否可以渲染具有context['custom-data'] = {c{subc: ModelClass.objects.all()} for c in classes for subc in subclasses}的键值对的上下文?就我而言,它没有,而我假设它会。
  • 好,祝你的项目好运。

标签: django python-3.x django-models django-templates django-views


【解决方案1】:

我发现我没有正确访问模板级别的上下文。访问应通过以下键进行:

{% for c,subcdict in custom-data.items %}
    {% for subckey,objlist in subcdict.items %}
        {% for obj in objlist %}
            <p>{{ obj.prop }}</p>
        {% endfor %}
    {% endfor %}
{% endfor %}

感谢@moh369 在帖子 cmets 中的观察。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    相关资源
    最近更新 更多