美文网首页Python圈Python基础
Django基础7--模板系统

Django基础7--模板系统

作者: 伊洛的小屋 | 来源:发表于2020-08-30 10:00 被阅读0次
1.使用模板系统
  • 在之前的model.py文件中新增加Detail
from django.db import models

# Create your models here.


class ProjectInfo(models.Model):
    """ 项目信息模型 """
    project_name = models.CharField(max_length=30)
    dev = models.CharField(max_length=20)
    tester = models.CharField(max_length=20)
    add_data = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        # 返回项目名称
        return self.project_name


class Detail(models.Model):
    project = models.ForeignKey(ProjectInfo, on_delete=models.CASCADE)
    detail_text = models.CharField(max_length=200)

    def __str__(self):
        return self.detail_text

使用 ForeignKey定义了一个关系。这将告诉 Django,每个 detail 对象都关联到一个 ProjectInfo 对象。Django 支持所有常用的数据库关系:多对一、多对多和一对一

  • 在管了后台添加数据


  • 对应项目添加详情


  • 重新改写一下project.html的模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>AutoPlarform Home</title>
</head>
<body>
<h1>{{ project.project_name }}</h1>
{% for detail in project.detail_set.all %}
    <li>{{ detail.detail_text }}</li>
{% endfor %}
</body>
</html>

模板系统统一使用点符号来访问变量的属性

  • 现在我们来访问下每个项目对应的url,来看一下项目的信息详情有没有正确的显示出来




    显示内容正确

2. 去除模板中的硬编码URL
  • 我们修改一下之前home的页面,让对应内容可以跳转
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>AutoPlarform Home</title>
</head>
<body>
{% if project_list %}
    <ul>
    {% for project in project_list %}
        <li>
        <a href="/autoapi/{{ project.id }}/">{{ project.project_name }}</a>
        </li>
    {% endfor %}
    </ul>
{% endif %}

</body>
</html>
  • 打开home页面
  • 然后点击接口自动化



    成功跳转到接口自动化的介绍页面

  • 但是以上内容你会发现一个问题,我们的挑战链接是硬编码的
 <a href="/autoapi/{{ project.id }}/">{{ project.project_name }}</a>

硬编码和强耦合的链接,对于一个包含很多应用的项目来说,修改起来是十分困难的
不过的还记得之前在url配置页面的内容嘛

# 作者:伊洛Yiluo 公众号:伊洛的小屋
# 个人主页:https://yiluotalk.com/
# 博客园:https://www.cnblogs.com/yiluotalk/
from django.urls import path
from . import views


urlpatterns = [
    path('home/', views.home, name='index'),
    path('<int:project_id>/', views.project_list, name='project list'),
    path('register/', views.register, name='register'),
]

之前我们通过name参数为url定义了名字,现在我们可以通过{% url %}代替它

  • 来改一下home.html代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>AutoPlarform Home</title>
</head>
<body>
{% if project_list %}
    <ul>
    {% for project in project_list %}
        <li>
        <a href="{% url 'project list' project.id %}">{{ project.project_name }}</a>
        </li>
    {% endfor %}
    </ul>
{% endif %}

</body>
</html>
  • 再次打开一个页面验证下跳转



    成功的跳转

  • 这样做的好处也可以不动模板的内容改URL
from django.urls import path
from . import views


urlpatterns = [
    path('home/', views.home, name='index'),
    path('detail/<int:project_id>/', views.project_list, name='project list'),
    path('register/', views.register, name='register'),
]

  • 打开home首页点击跳转



    URL已经按预设置发生了变化

3.为URL名称添加命名空间

现在再Django项目中,只有一个APP,但是实际开发过程中会有很多。Django如何分辨重名的URL
答案就是:在URLconf中添加命名空,加上app_name 设置命名空间

from django.urls import path
from . import views


app_name = 'autoapi'
urlpatterns = [
    path('home/', views.home, name='index'),
    path('detail/<int:project_id>/', views.project_list, name='project list'),
    path('register/', views.register, name='register'),
]

HTML页面再改动下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>AutoPlarform Home</title>
</head>
<body>
{% if project_list %}
    <ul>
    {% for project in project_list %}
        <li>
        <a href="{% url 'autoapi:project list' project.id %}">{{ project.project_name }}</a>
        </li>
    {% endfor %}
    </ul>
{% endif %}

</body>
</html>
  • 打开网页查看效果


欢迎下方【戳一下】【点赞】
Author:伊洛Yiluo
愿你享受每一天,Just Enjoy !

相关文章

  • Django基础7--模板系统

    1.使用模板系统 在之前的model.py文件中新增加Detail 使用 ForeignKey定义了一个关系。这将...

  • Django模板系统

    1,用{{}}包围的是变量,如{{person_name}}, 2,用{%%}包围的是块标签,如{%if orde...

  • Django模板系统

    模板路径设置在settings中设置 1.在项目根目录中新建templates文件夹2.在settings文件中找...

  • Django模板基础

    知识点: 路径配置 渲染方式 模板变量 前面的两节中我们都是用简单的 django.http.HttpRespon...

  • Django模板基础

    假如我们想用逗号将这些元素连接起来: home.html {%foriteminList%} {{item}}, ...

  • 2018-08-08 模板

    DTL文件 Django文件中的模板系统主要是DTL模板语言,比普通HTML功能更为强大。 模板查找路径配置 模板...

  • Django快速开发可定制的办公系统实战(5):前端模板的使用

    参考资料:https://docs.djangoproject.com/en/1.11/ 1 Django基础模板...

  • Django模板系统使用指南

    Django自带的模板系统虽然比不上专业的类似jinjia2那么自由的模板系统,但是对于我们新手来说也是够用了,由...

  • jinja2

    jinja2是Flask作者开发的一个模板系统,起初是仿django模板的一个模板引擎,为Flask提供模板支持,...

  • Django开发环境安装及apache部署

    安装 Django 基础命令 3.Apache 部署 Django 项目 系统环境 安装 Apache 和 mod...

网友评论

    本文标题:Django基础7--模板系统

    本文链接:https://www.haomeiwen.com/subject/qttjsktx.html