文档章节

简单的博客系统(四)Django请求HTML页面视图信息--基于函数的视图

ZeroBit
 ZeroBit
发布于 07/21 00:04
字数 900
阅读 13
收藏 0

1. 编写用于查询数据的功能函数

应用目录 下的 views.py 文件通常用于保存响应各种请求的函数或类

from django.shortcuts import render
from .models import BlogArticles

# Create your views here.
def blog_title(request): # request 负责响应所接收到的请求
    # 查询得到所有 BlogArticles 表中的所有实例数据
    blogs = BlogArticles.objects.all()
    """
    render() 作用是将数据渲染到指定模板上
    "blog/titles.html" 指定渲染到哪个页面,页面路径为应用目录下的templates目录
    {"blogs": blogs} 为传给页面的数据
    """
    return render(request, "blog/titles.html", {"blogs": blogs})

2. 在应用目录下创建相关html页面文件

  • 文件目录结构如下:

  • 编写相关页面代码
<!-- base.html公共模板页面 -->
<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>{% block title %}{% endblock %}</title> <!-- 表示里面的内容被 title block 代替 -->

    <!-- Bootstrap -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">

    <!--[if lt IE 9]>
      <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
    <div class="container">
        {% block content %} <!-- 表示页面的内容被 content block 代替 -->
        {% endblock %}
    </div>
    <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
  </body>
</html>

<!-- titles.html -->
{% extends "base.html" %} <!-- 继承 base.html 模板页 -->

{% block  title %}
博客标题
{% endblock %}

{% block content %}
    <div class="row text-center vertical-middles-sm">
        <h1>我的博客</h1>
    </div>
    <div class="row">
        <div class="col-xs-12 col-md-8">
            <ul>
                <!-- 循环遍历 blogs 里的对象 -->
                {% for blog in blogs %}
                    <li>{{ blog.title }}</li>
                {% endfor %}
            </ul>
        </div>
    </div>
{% endblock %}

3. 配置URL

  1. 编写 项目目录 下的 urls.py 文件
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path("blog/", include('blog.urls')), # 通过这里将blog/请求转向blog应用的urls.py,即./blog/urls.py文件
]
  1. 编写 应用目录 下的 urls.py 文件
from django.urls import path
from . import views

"""
第一个参数为空,表示访问根,因为该文件在blog应用中,则要为blog/
views.blog_title 表示响应该请求的函数
"""
urlpatterns = [
    path('', views.blog_title),
]
  1. 启动项目访问:http://127.0.0.1:8000/blog/ 即可看到结果

4. 给url传参数

  1. 修改 titles.html 文件给文章标题添加链接
<!-- 循环遍历 blogs 里的对象 -->
{% for blog in blogs %}
<li><a href="{{ blog.id }}">{{ blog.title }}</a></li>
{% endfor %}
  1. 为该请求编写对应的函数(./blog/views.py)
def blog_article(request, article_id): # 该请求传入 article_id 参数
    article = BlogArticles.objects.get(id=article_id)
    pub = article.publish
    return render(request, "blog/content.html",{"article":article, "publish":pub})
  1. 编写显示文件内容的html页面(templates/blog/content.html)
{% extends "base.html" %} <!-- 继承 base.html 模板页 -->

{% block  title %}
博客标题
{% endblock %}

{% block content %}
    <div class="row text-center vertical-middles-sm">
        <h1>{{ article.title }}</h1>
    </div>
    <div class="row">
        <div class="col-xs-12 col-md-8 col-md-offset-2">
            <p class="text-center">
                <span>{{ article.author.username }}</span>
                <span style="margin-left: 20px;">{{ publish }}</span>
            </p>
            <div>{{ article.body }}</div>
        </div>
    </div>
{% endblock %}
  1. 增加请求所对应的url(./blog/urls.py)
urlpatterns = [
    path('', views.blog_title),
    path('<int:article_id>/', views.blog_article),
]

URL配置和查询

当用户通过浏览器请求某个URL时,Django会根据请求路径依次在URLConf中查询,并将第一个符合条件的映射关系作为查询结果。

例如,访问 http://localhost:8000/blog/1,其请求过程如下:

  1. localhost:8000:主域名部分,不进行查询
  2. /blog/:首先在 项目目录/urls.py 中查询,遇到符合条件的URL映射(path('blog/', include('blog.urls')),),根据此映射中的描述,到 blog.urls(./blog/urls.py) 中查询
  3. /1:在 ./blog/urls.py 中有URL(path('<int:article_id>/', views.blog_article))配置,请求路径正好符合,从而确定最终访问的视图函数 views.blog_article

© 著作权归作者所有

ZeroBit

ZeroBit

粉丝 1
博文 58
码字总数 49861
作品 0
南宁
私信 提问
Django教程(二)- Django视图与网址进阶

目录: Django教程(一)- Django视图与网址 Django教程(二)- Django视图与网址进阶 Django教程(三)- Django表单Form Django教程(四)- Django模板及进阶 Django模型(数据库)及Django ...

_知几
2017/07/12
0
0
django 1.8 官方文档翻译: 1-2-3 编写你的第一个Django应用,第3部分

编写你的第一个 Django 程序 第3部分 本教程上接 教程 第2部分 。我们将继续 开发 Web-poll 应用并且专注在创建公共界面 – “视图 (views )”。 哲理 在 Django 应用程序中,视图是一“类...

apachecn_飞龙
2015/08/29
0
0
史上最友好的 Django 入门教程

Django是使用Python开发的开源Web开发框架。使用Django,你能以最小的代价构建和维护高质量的Web应用。 我们参考Django 官方文档,制作了一门新手更容易理解的Django 基础教程 ,帮助大家更好...

实验楼
2018/07/26
0
0
【译】自己动手写Django app,第三部分【完】

原文地址:https://docs.djangoproject.com/en/1.4/intro/tutorial03/ 这个教程是从教程2留下的地方开始的。我们继续这个基于网络调查应用程序并且将关注与创建一个公共接口——“view”。 ...

davidxp
2013/02/25
2.4K
0
Django开发与攻防测试(入门篇)

  最近在培训包括在一些比赛中,python框架方面的攻防需求出现的越来越频繁。   虽然python框架相对于Java、php等的广泛度还略低一点(当然现在的流行程度已经越来越高了),但是我们并不...

FreeBuf
2018/07/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部