【问题标题】:Django template won't display model object attributes on pageDjango 模板不会在页面上显示模型对象属性
【发布时间】:2021-08-01 08:23:42
【问题描述】:

我正在尝试在 Django 模板中显示我的模型对象的属性,但数据不会出现在页面源中。

在 views.py

    def view_func(request):
        ...
        data = ModelObj.objects.all()
        print(data)   #prints <QuerySet [ <ModelObj: ModelObj object (primary_key)>, ... ]> 
        return render(request, "templates/app/page.html", {'data': data})

在page.html

... formatted html ...
<thead> ... </thead>
   <tbody>
   { % for i in data % }
        <tr>
            <td> {{ i.name }} </td>
            <td> {{ i.time }} </td>
            <td> {{ i.value }} </td>
        </tr>
        { % endfor % }
   </tbody>

当我在运行 Django 站点后查看页面源代码时:

... html ...
    <tbody>
        { % for i in data % }
        <tr>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        { % endfor % }
    </tbody>

如果我将&lt;td&gt; {{data}} &lt;/td&gt;添加到html页面,我可以看到页面上显示&lt;QuerySet [ &lt;ModelObj: ModelObj object (primary_key)&gt;, ... ]&gt;,但是Django不会在页面上显示模型对象属性。感谢您对此错误的任何帮助,谢谢。 编辑:这是在 Python 3.9 和 Django 版本 3.1.2

【问题讨论】:

    标签: python html django django-templates


    【解决方案1】:

    您的 jinja 模板中的百分号 % 和大括号 {} 之间似乎有 空格。那是不正确的语法。 { 和 % 不应包含空格:

    正确的语法:

    {% for i in data %}
      <td> {{ i.name }} </td>
      <td> {{ i.time }} </td>
      <td> {{ i.value }} </td>
    {% endfor %}
    

    不正确的语法:(空格是错误的语法)

    <!-- Incorrect Syntax -->
    { % for i in data % }
      <td> {{ i.name }} </td>
      <td> {{ i.time }} </td>
      <td> {{ i.value }} </td>
    { % endfor % }
    

    jinja 模板不应在页面源中可见,例如,如果循环运行 3 次,它将显示 html 标记三次而不是 jinja 模板。

    【讨论】:

    • 非常感谢,这解决了错误!我不知道这些空格的语法不正确。
    猜你喜欢
    • 2019-09-03
    • 2017-04-25
    • 2013-02-07
    • 1970-01-01
    • 2020-03-20
    • 2016-10-15
    • 2016-02-20
    • 2019-06-07
    • 1970-01-01
    相关资源
    最近更新 更多