【Youtobe trydjango】Django2.2教程和React实战系列八【渲染数据库数据与模板加载顺序探究】
1. 准备数据
python shell看一下有数据
2. 渲染数据库数据到模板
products\views.py
from django.shortcuts import render
from .models import Product
# Create your views here.
def product_detail_view(request):
obj = Product.objects.get(id=1)
# context = {
# 'title': obj.title,
# 'description': obj.description,
# }
context = {
'object': obj,
}
return render(request, "product/detail.html", context)
trydjango\urls.py
from products.views import product_detail_view
path('product/', product_detail_view), # 产品
新建templates\product\detail.html
{% extends 'base.html' %}
{% block content %}
<h1>{{ object.title }}</h1>
<p>
{% if object.description != None and object.description != '' %}{{ object.description }}{% else %}Coming Soon!{% endif %}
</p>
{{ object.price }}
{% endblock %}
效果
3. 如何在app里加载django模板
在products\templates\
文件夹中创建文件夹products
,然后在products
里面创建文件products\templates\products\product_detail.html
将上面模板内容复制进来:
{% extends 'base.html' %}
{% block content %}
<h1>In App Template: {{ object.title }}</h1>
<p>
{% if object.description != None and object.description != '' %}{{ object.description }}{% else %}Coming Soon!{% endif %}
</p>
{{ object.price }}
{% endblock %}
先修改上面views.py
中返回的静态文件路径为错误的return render(request, "products/detail.html", context)
看下报错样子:
由报错可以看出django找模板的顺序:
- 先加载项目根目录的templates文件夹中的
- 然后去django应用admin和auth中的templates找
- 最后找自定义app应用的templates
以上位置都找不到相应的文件模板则报错
django.template.loaders.filesystem.Loader: E:\randolph\trydjango\src\trydjango\templates\products\detail.html (Source does not exist)
django.template.loaders.app_directories.Loader: C:\Users\randolph\.virtualenvs\trydjango-2d__pVTL\lib\site-packages\django\contrib\admin\templates\products\detail.html (Source does not exist)
django.template.loaders.app_directories.Loader: C:\Users\randolph\.virtualenvs\trydjango-2d__pVTL\lib\site-packages\django\contrib\auth\templates\products\detail.html (Source does not exist)
django.template.loaders.app_directories.Loader: E:\randolph\trydjango\src\trydjango\products\templates\products\detail.html (Source does not exist)
下面来做一个实验验证下,首先将src\trydjango\templates\product\detail.html
修改文件夹和文件名为src\trydjango\templates\products\product_detail.html
将src\trydjango\products\views.py
中返回值修改为"products/product_detail.html"
from django.shortcuts import render
from .models import Product
# Create your views here.
def product_detail_view(request):
obj = Product.objects.get(id=1)
# context = {
# 'title': obj.title,
# 'description': obj.description,
# }
context = {
'object': obj,
}
return render(request, "products/product_detail.html", context)
重启开发服务器后,刷新页面
然后随意重命名这个html文件 或 将根目录templates中的文件夹products
直接删除:
这种情况djang只能找到应用中的静态文件
效果