我无法在模板中呈现我的 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/