我无法在模板中呈现视图。我想我已经尝试了一切。一切正常,除了在模板上进行数据渲染外。
我的model.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
我的views.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
变化:
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
...
最后,我强烈建议您将模板重命名为特定于此特定视图的名称。例如,如果这是您的索引视图,则可以将其命名index.html
。或者也许zoo.html
与您的视图名称相对应。
这不是必需的,但是如果您要扩展base.html
文件,则在构建此应用程序的过程中将很有用。这很方便,因为它允许您缩减样板html,而只关注每个模板/视图的核心功能。它还具有使所有扩展相同base.html
文件的不同页面之间提供一致的用户体验更加容易的优势。
要了解有关此内容的更多信息,请访问https://docs.djangoproject.com/en/3.1/ref/templates/language/。
重要说明:如果执行此操作,请不要忘记将调用更改为render
in,views.py
以适应重命名的模板文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句