django - 无法在 Django 模板中渲染 View

标签 django templates django-templates

我无法在模板中呈现我的 View 。 我想我已经尝试了一切。 除了模板上的数据呈现之外,一切正常。

我的模型.py:

from django.db import models
class Driver(models.Model):
    name = models.CharField(max_length=150)
    surname = models.CharField(max_length=150, default='')

    def __str__(self):
        return self.name

我的观点.py:

from django.shortcuts import render
from zoo.models import Driver


def MyView(request):
    drivers = Driver.objects.all()
    return render("zoo/base.html", {"drivers": drivers})

我的模板:

{% load staticfiles %}
{% load render_bundle from webpack_loader %}
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Example</title>
    {% render_bundle 'app' 'css' %}
  </head>
  <body>
     {{ drivers }}

     {{ drivers.name }}

     {% for driver in drivers %}
         {{driver.name}}

</body>
</html>

我的数据库有 315 个司机,包含司机的名字和姓氏。

项目结构:

Project 
      app
         setting.py
         __init__.py
          ...
      zoo
         templates
              base.html
         __init__.py
         models.py
         views.py
          ...

最佳答案

views.py

views.py中更改:

return render("zoo/base.html", {"drivers": drivers})

至:

return render(request, "zoo/base.html", {"drivers": drivers})

模板

您需要关闭模板中的 for 循环。有关于这方面的好信息值得一读:https://docs.djangoproject.com/en/3.1/ref/templates/builtins/ .

{% for driver in drivers %}
    {{ driver.name }}
{% endfor %}

此外,我从您提供的代码和您的解释中猜测 {{ drivers.name }} 可能不会呈现。直到您迭代 drivers QuerySet 后,您才能访问各个 driver 字段(例如 driver.name )。

文件结构

最好的做法是为模板和静态文件命名。 Django 的教程在 https://docs.djangoproject.com/en/3.1/intro/tutorial03/ 讨论了这个问题。 。如果您这样做,您的目录结构将从此改变(您当前拥有的目录结构):

Project 
      app
         setting.py
         __init__.py
          ...
      zoo
         templates
              base.html
         __init__.py
         models.py
         views.py
          ...

对此:

Project 
      app
         setting.py
         __init__.py
          ...
      zoo
         templates
            zoo
               base.html
         __init__.py
         models.py
         views.py
          ...

最后,我强烈建议您将模板重命名为特定于该特定 View 的名称。例如,如果这是您的索引 View ,您可以将其命名为 index.html。或者也许 zoo.html 与您的 View 名称相对应。

这不是必需的,但是,如果您想扩展 base.html 文件,那么在您构建此应用程序时它将非常有用。这很方便,因为它允许您减少样板 html 的数量,而只关注每个模板/ View 的核心功能。它还具有以下优点:可以更轻松地在扩展同一 base.html 文件的不同页面之间提供一致的用户体验。

要了解有关此内容的更多信息,请查看 https://docs.djangoproject.com/en/3.1/ref/templates/language/ .

重要提示:如果您这样做,请不要忘记在 views.py< 中更改对 render 的调用 以容纳您重命名的模板文件。

关于django - 无法在 Django 模板中渲染 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64636830/

相关文章:

python - Azure 存储访问被拒绝

python - 如何让 django 识别两个 url?

django - 诊断零星的 Django/Postgres "DatabaseError: current transaction is aborted"

python - 与仅将 Foundation 文件放入静态相比,使用 Foundation Django 包有什么好处

django - 多对多排除多个对象

php - Symfony2 Twig 扩展

php - 使用 php 发送带有模板的电子邮件

c++ - 如何在其他模板类中专门化模板类?

javascript - 有没有办法通过 ajax 提高正常的 Django 表单验证?

python - Django:模板和遍历字典