【Youtobe trydjango】Django2.2教程和React实战系列八【渲染数据库数据与模板加载顺序探究】

【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找模板的顺序:

  1. 先加载项目根目录的templates文件夹中的
  2. 然后去django应用admin和auth中的templates找
  3. 最后找自定义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只能找到应用中的静态文件
效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值