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

本文详细介绍如何使用Django框架搭建一个完整的博客系统,包括功能函数编写、HTML页面创建、URL配置及参数传递等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

转载于:https://my.oschina.net/zerobit/blog/3076833

Django 中,我们可以使用基于函数视图来处理请求并生成 HTML 页面。下面是一个简单的例子,展示了如何编写一个基于函数视图来响应请求并生成 HTML 页面。 首先,我们需要在 Django 项目的 `views.py` 文件中定义一个函数,该函数将作为我们的视图。 ```python from django.shortcuts import render from .models import Post def post_list(request): posts = Post.objects.all() return render(request, 'blog/post_list.html', {'posts': posts}) ``` 在这个例子中,我们定义了一个名为 `post_list` 的函数,它接收一个名为 `request` 的参数,即来自客户端的 HTTP 请求。在函数中,我们使用 `Post` 模型的 `objects` 属性来查询所有博客文章,并将它们存储在 `posts` 变量中。 然后,我们使用 `render` 函数来生成 HTML 页面。`render` 函数的第一个参数是 `request` 对象,第二个参数是要呈现的 HTML 模板文件的名称,第三个参数是一个字典,其中包含我们要传递给 HTML 模板的上下文变量。 在这个例子中,我们将 `posts` 变量传递给 HTML 模板,以便在页面中显示所有博客文章。 接下来,我们需要在 Django 项目中创建一个 HTML 模板文件。在 `blog` 应用程序的 `templates` 目录中创建一个名为 `post_list.html` 的文件,然后添加以下内容: ```html {% extends 'blog/base.html' %} {% block content %} {% for post in posts %} <div class="post"> <h1><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></h1> <p class="date">{{ post.published_date }}</p> <p>{{ post.text }}</p> </div> {% endfor %} {% endblock %} ``` 在这个例子中,我们使用 Django 模板语言来生成 HTML 页面。在模板中,我们使用 `for` 循环来遍历所有博客文章,并将它们显示在页面上。 最后,我们需要在 Django 项目的 `urls.py` 文件中定义一个 URL 模式,以便将请求路由到我们的视图。假设我们希望将所有博客文章列出在 `http://localhost:8000/` 上,我们可以添加以下 URL 模式: ```python from django.urls import path from . import views urlpatterns = [ path('', views.post_list, name='post_list'), ] ``` 在这个例子中,我们将空 URL 模式路由到 `post_list` 视图,并将其命名为 `post_list`。现在,当客户端访问 `http://localhost:8000/` 时,Django 将调用 `post_list` 视图,并返回生成的 HTML 页面。 这就是一个基于函数视图简单示例。在 Django 中,我们还可以使用基于类的视图来处理请求和生成 HTML 页面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值