Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python Web 菜谱系统的首页,不会前端技术,也能做【附源码】

Python Web 菜谱系统的首页,不会前端技术,也能做【附源码】

原创
作者头像
查理不是猹
发布于 2022-01-08 03:28:29
发布于 2022-01-08 03:28:29
5870
举报

七、出现吧,Python Web 菜谱系统的首页

7.1 菜谱系统首页初始化

滚雪球第三轮核心学习的是 Python Web 相关知识点,那不可避免的会涉及到前端技术栈,如果你对 HTML,CSS 完全零基础,学习来可能比较吃力,建议可以先补充一些前端知识,便于后续学习,你也可以先直接进入 Django 学习阶段,问题不大。

本篇博客开始构建菜谱系统的前端页面,基本涉及的知识就是网页模板框架与前端,优先会从用户可鉴权系统开始编写,上篇博客的模型相关内容,先放一下,不久就要继续使用。

下面开始编写首页部分前端代码,我们选择的是 [BootStrap3 框架],这个框架接受起来比较容易一些。

在 Django 中实现一个页面,需要两个步骤,第一步,创建模板 HTML 文件,第二步,修改 views.py 文件,完成视图处理函数。

创建目录和文件

menuapp 应用目录下创建 templates 文件夹,然后该目录下继续创建一个 menuapp 的子目录,有点绕,看图。

接下来在 templates/menuapp 目录中新建一个 index.html 的文件,该页面就是首页的模板文件,以下为代码部分,涉及了前端相关知识点。

肯定有人问,难道代码都是自己敲出来的吗?这肯定不是,如果这样,没有前端知识,咱就学不下去了,这些内容是修改出来的。

打开 [Bootstrap3 模板页],在里面选择一个模板,例如下面的内容。

在打开的页面中,点击鼠标右键选择查看源码,在源码页面复制你要的内容,去掉里面相对路径相关部分代码,例如下述内容。

代码语言:txt
AI代码解释
复制
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
<script src="../../assets/js/ie10-viewport-bug-workaround.js"></script>

这种 ../../ 的都要去除,就得到了最终的源码部分。

代码语言:txt
AI代码解释
复制
<!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" />
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <meta name="description" content="" />
    <meta name="author" content="" />
    <link rel="icon" href="../../favicon.ico" />

    <title>Jumbotron Template for Bootstrap</title>
    <!-- Bootstrap core CSS -->
    <link
      href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"
      rel="stylesheet"
    />
  </head>

  <body>
    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button
            type="button"
            class="navbar-toggle collapsed"
            data-toggle="collapse"
            data-target="#navbar"
            aria-expanded="false"
            aria-controls="navbar"
          >
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a rel="nofollow" class="navbar-brand" href="#">Project name</a>
        </div>
        <div id="navbar" class="navbar-collapse collapse">
          <form class="navbar-form navbar-right">
            <div class="form-group">
              <input type="text" placeholder="Email" class="form-control" />
            </div>
            <div class="form-group">
              <input
                type="password"
                placeholder="Password"
                class="form-control"
              />
            </div>
            <button type="submit" class="btn btn-success">Sign in</button>
          </form>
        </div>
        <!--/.navbar-collapse -->
      </div>
    </nav>

    <!-- Main jumbotron for a primary marketing message or call to action -->
    <div class="jumbotron">
      <div class="container">
        Hello, world!
        <p>
          This is a template for a simple marketing or informational website. It
          includes a large callout called a jumbotron and three supporting
          pieces of content. Use it as a starting point to create something more
          unique.
        </p>
        <p>
          <a rel="nofollow" class="btn btn-primary btn-lg" href="#" role="button"
            >Learn more &raquo;</a
          >
        </p>
      </div>
    </div>

    <div class="container">
      <!-- Example row of columns -->
      <div class="row">
        <div class="col-md-4">
          <h2>Heading</h2>
          <p>
            Donec id elit non mi porta gravida at eget metus. Fusce dapibus,
            tellus ac cursus commodo, tortor mauris condimentum nibh, ut
            fermentum massa justo sit amet risus. Etiam porta sem malesuada
            magna mollis euismod. Donec sed odio dui.
          </p>
          <p>
            <a rel="nofollow" class="btn btn-default" href="#" role="button"
              >View details &raquo;</a
            >
          </p>
        </div>
        <div class="col-md-4">
          <h2>Heading</h2>
          <p>
            Donec id elit non mi porta gravida at eget metus. Fusce dapibus,
            tellus ac cursus commodo, tortor mauris condimentum nibh, ut
            fermentum massa justo sit amet risus. Etiam porta sem malesuada
            magna mollis euismod. Donec sed odio dui.
          </p>
          <p>
            <a rel="nofollow" class="btn btn-default" href="#" role="button"
              >View details &raquo;</a
            >
          </p>
        </div>
        <div class="col-md-4">
          <h2>Heading</h2>
          <p>
            Donec sed odio dui. Cras justo odio, dapibus ac facilisis in,
            egestas eget quam. Vestibulum id ligula porta felis euismod semper.
            Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum
            nibh, ut fermentum massa justo sit amet risus.
          </p>
          <p>
            <a rel="nofollow" class="btn btn-default" href="#" role="button"
              >View details &raquo;</a
            >
          </p>
        </div>
      </div>

      <hr />

      <footer>
        <p>&copy; 2016 Company, Inc.</p>
      </footer>
    </div>
    <!-- /container -->

    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>

    <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  </body>
</html>

模板文件编写完毕之后,就可以尝试运行 Django 网站,实现我们最终的目标了。

运行前,还需要做一些准备工作,第一个就是修改默认首页。

编辑下图 urls.py 文件。

修改代码如下:

代码语言:txt
AI代码解释
复制
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    # 将 menuapp 应用的 URL 设置包含到项目的 URL 设置中
    path("", include("menuapp.urls"))
]

Django 一般建议为每个不同的 APP 应用单独设计 URL 文件,所以还需要在 menuapp 文件中,新增一个 urls.py 文件,也就是上述代码引用的部分 path("", include("menuapp.urls")),代码位置如下图所示。

文件中的代码如下:

代码语言:txt
AI代码解释
复制
from django.urls import path
from . import views

urlpatterns = [
    path("", views.index, name="defalut"),
]

当访问默认路径的时候,即 http://127.0.0.1:8000/,会调用 views 模块中的 index 方法,所以还需要修改 views.py 文件,代码如下:

代码语言:txt
AI代码解释
复制
from django.shortcuts import render
# Create your views here.
def index(request):
    return render(request, "menuapp/index.html")

到这里,才发现模板文件被正式加载了。

接下来就可以使用 python manage.py runserver 运行我们的应用了,但是又出现问题了,即下述错误。

该错误表示模板文件没有加载到,有两个原因,第一个是模板文件的位置,注意是在 menuapp 应用目录下,如果还不确定,请返回上文查找图示,第二种原因是,我们还没有在 settings.py 中把 menuapp 加入到 settings.INSTALLED_APPS 里面去,导入无法加载应用,修改 settings.py 文件,代码如下:

代码语言:txt
AI代码解释
复制
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'menuapp'
]

此时在运行代码,如果成功出现如下界面,表示模板文件正式加载完毕。

7.2 菜谱系统静态文件迁移


在上文代码的 index.html 文件中,使用了如下内容,这些内容都是调用的 CDN 加速网址的链接(全面学过前端之后,可以在补充这部分知识),这些地址的完全决定权,不在我们手中,所以接下来需要将下述内容修改为菜谱项目静态文件中。

代码语言:txt
AI代码解释
复制
<link
  href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"
  rel="stylesheet"
/>
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

打开 Bootstrap 3 官方网站,提前下载源码素材,

创建静态文件目录与文件

将下载好的文件拷贝到 static 目录,最终的结果如下图所示。

接下来就是如何在 Django 模板文件中去应用静态文件相关知识点了。

第一步:在需要使用静态文件的模板页首行插入 {% load static %} 语句。

第二步:在后续使用静态文件的地方使用 static 标签加上路径即可,例如使用 bootstrap.min.js 文件,语句为 {% static 'js/bootstrap.min.js' %}

第三步:上述路径会因为 settings.py 中设置的 STATIC_URL 值加上路径值,成为最终的地址,例如 static/js/bootstrap.min.js

第四步:在 urls.py 中增加静态文件处理代码

上述步骤涉及的代码文件修改内容如下:

index.html 修改完善

代码语言:txt
AI代码解释
复制
{% load static %}
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <title>菜谱系统----首页</title>
    <link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet">

</head>

<body>
 <!-- 其余部分与上文一致 -->

</div> <!-- /container -->

<script src="{% static 'js/bootstrap.min.js' %}"></script>

</body>
</html>

urls.py 文件修改如下,注意该文件是项目目录的,不是 menuapp 应用目录

代码语言:txt
AI代码解释
复制
from django.contrib import admin
from django.urls import path, include
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns = [
    path('admin/', admin.site.urls),
    # 将 menuapp 应用的 URL 设置包含到项目的 URL 设置中
    path("", include("menuapp.urls"))
]
urlpatterns += staticfiles_urlpatterns()

重新使用 python manage.py runserver 运行程序,浏览页面看到数据正常即可。

7.3 Django 模板语言


在上文使用的 {% 语句部分 %} 就是 Django 中的模板语言,模板与普通的文本文件有两个不一样的地方,模板包含变量,该变量在页面渲染网页的时候,会被替换为相应的值,模板中还包括逻辑处理代码,这部分知识叫做标签。

变量在模板中使用双花括号表示 {{ 变量名 }},这里变量相关知识还涉及筛选器内容,后文都会有所涉及。

模板中的标签使用 {% %} 进行表示,标签中可以包含业务逻辑代码,有时也会存在开始标签和结束标签。

例如实现 if 语句的标签,写法如下:

代码语言:txt
AI代码解释
复制
<ul>
  {% if menu %}
  <li>{{ menu.name }}</li>
</ul>
{% endif %}

模板语言中使用 block 和 extends 两个标签实现继承,简单理解就是一堆公共模板。

父模板中使用 block 进行占位,子模板中使用 extends 进行继承。

7.3.1 拆分模板

接下来对模板进行拆分,将 index.html 文件中的头部提取出来。在 templates/menuapp 目录下创建一个新文件。

其中 frame.html 代码如下,只展示最核心部分,否则文章就太长了,注意 frame.html 为父模板,其中 {% block title %}{% endblock%} 为占位符,{% block content %}{% endblock %} 为占位符。

代码语言:txt
AI代码解释
复制
{% load static %}
<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8" />
    <title>{% block title %}{% endblock%}</title>
    <link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet" />
  </head>

  <body>
    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <!-- 里面内容省略 -->
      </div>
    </nav>

    <!-- Main jumbotron for a primary marketing message or call to action -->
    <div class="jumbotron">
      <!-- 里面内容省略 -->
    </div>

    {% block content %}{% endblock %}

    <script src="{% static 'js/bootstrap.min.js' %}"></script>
  </body>
</html>

index.html 文件代码如下:

代码语言:txt
AI代码解释
复制
{% extends "menuapp/frame.html" %} {% block title %} 菜谱系统---- 首页 {%
endblock %} {% block content %}
<div class="container">代码内容</div>
<!-- /container -->
{% endblock %}

views.py 文件源码依旧未变,具体如下:

代码语言:txt
AI代码解释
复制
from django.shortcuts import render

# Create your views here.
def index(request):
    return render(request, "menuapp/index.html")

此时运行效果如下:

7.4 本篇博客小节


本篇博客主要介绍的是 Django 中的最简单首页制作,尽量在无前端知识铺垫的情况下,帮助你学习 Python Web 相关知识,喜欢就点个赞吧。

本文转自 https://www.jianshu.com/p/1c81e86252f4,如有侵权,请联系删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Django用户登录与注册系统
一、创建项目 1.1.创建项目和app django-admin startproject mysite_login python manage.py startapp login 1.2.设置时区和语言 Django默认使用美国时间和英语,在项目的settings文件中,如下所示: LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True 我们把它改为亚洲/上海时间和中文 LAN
zhang_derek
2018/04/11
11.5K0
Django用户登录与注册系统
Python Django个人网站搭建4-配置使用 Bootstrap 4 并改写模板文件
作者: zifanwang  发布于2020-05-08
zifan
2021/12/14
2K0
Python Django个人网站搭建4-配置使用 Bootstrap 4 并改写模板文件
Django——图书管理系统(五)
本文接着来给网页添加bootstrap样式。首先,需要在settings.py文件中加入静态文件的配置,如下所示:
zy010101
2021/01/21
5540
前端框架AdminLTE
https://github.com/almasaeed2010/AdminLTE/releases
全栈程序员站长
2022/09/18
2.5K0
前端框架AdminLTE
Python Web聊天室--首页
在layout里创建base.html(基础模板,我们可以在其他的模板里调用这个,可以减少代码重复率)
py3study
2020/01/07
1.6K0
Python Django个人网站搭建5-编写文章详情页面并支持markdown语法
作者: zifanwang  发布于2020-05-09
zifan
2021/12/14
4750
Python Django个人网站搭建5-编写文章详情页面并支持markdown语法
一个完整的Django入门指南(二)
第三部分 Introduction        In this tutorial, we are going to dive deep into two fundamental concepts: URLs and Forms. In the process, we are going to explore many other concepts like creating reusable templates and installing third-party libraries. We are a
zhang_derek
2018/04/11
3.3K0
一个完整的Django入门指南(二)
前端MVC学习总结(四)——NodeJS+MongoDB+AngularJS+Bootstrap书店示例
摘要总结:本文介绍了如何使用AngularJS04进行图书信息管理系统开发。主要包括了图书信息录入、查询、修改和删除等功能。同时,还提供了编辑图书和删除图书的接口。通过使用AngularJS04的指令和指令模块,可以方便地实现图书信息管理系统。
张果
2018/01/04
2.4K0
前端MVC学习总结(四)——NodeJS+MongoDB+AngularJS+Bootstrap书店示例
Django实战-用户注册和登陆系统
每当我们开始一个新项目的时候,通常都会搭建一个全新、独立、隔离的项目环境,这样做的好处自然不必多说。有很多种建立项目虚拟环境的工具,使用比较普遍的是Python中的virtualenv。安装好virtualenv工具后,进入想要放置的项目文件夹,建立一个虚拟环境,激活环境,安装django。
菲宇
2019/07/31
7.8K0
Django实战-用户注册和登陆系统
bootstrap 网页实例 常用样式
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Bootstrap 实例 - 一个简单的网页</title> <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://cdn.bootcss.com/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <style> .fakeimg { height: 200px; background: #aaa; } </style> </head> <body> <div class="jumbotron text-center" style="margin-bottom:0"> <h1>我的第一个 Bootstrap 页面</h1> <p>重置浏览器窗口大小查看效果!</p> </div>
用户5760343
2019/07/05
1.3K0
bootstrap 网页实例 常用样式
django2实战4.创建文章列表页和详情页url适配自定义模型管理器在view中写业务逻辑新建模板文件添加分页功能
我们已经知道如何操作文章表的数据,接下来要将这些数据用界面显示出来。这就需要用到django的view层负责处理http请求,并将数据传给template模板进行渲染
章鱼喵
2018/09/26
1.5K0
django2实战4.创建文章列表页和详情页url适配自定义模型管理器在view中写业务逻辑新建模板文件添加分页功能
Python测试开发-创建模态框及保存数据
模态框是指的在覆盖在父窗体上的子窗体。可用来做交互,我们经常会看到模态框用来登录、确定等等,到底是怎么实现这种弹出效果,bootstrap已经为我们提供了相应的组件。
测试开发社区
2019/09/20
1.3K0
Python测试开发-创建模态框及保存数据
BBS论坛(三)
3.1.cms用户名渲染和注销功能实现 显示登录的用户名 (1)app/cms/hooks.py from .views import bp import config from flask import session,g from .models import CMSUser @bp.before_request def before_request(): if config.CMS_USER_ID in session: user_id = session.get(confi
zhang_derek
2019/02/13
9700
BBS论坛(三)
Django教程第2章| Web开发实战-用户管理
模板文件和静态文件分别放入templates和static文件夹,django会自动加载到容器。
仲君Johnny
2024/01/24
3861
Django教程第2章| Web开发实战-用户管理
Django入门笔记:身份认证模块
从之前的学习我们发现,一直在blog应用中进行开发。本章开始新建另一个App来开发,介绍Django的身份认证模块,实现用户登录、注册、注销。
宇宙之一粟
2020/10/26
5160
基于Django的电子商务网站开发(连载14)
(1)当检查当前用户为合法用户后,通过语句count = util.cookies_count(request)调用util类中的cookies_count()方法,显示当前用户的购物车内有多少商品。
顾翔
2019/12/11
5790
使用django-crispy-form美化form表单
django-crispy-form的具体使用参照https://django-crispy-forms.readthedocs.io/en/latest/
菲宇
2019/08/14
2.9K0
BBS论坛(十七)
17.首页导航条实现和代码抽离 (1)temlates/common/_head.html <meta name="csrf-token" content="{{ csrf_token() }}"> <script src="http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script> <link href="http://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="st
zhang_derek
2019/02/13
7570
05 . 前端之BootStrap
bootstrap下载地址 https://github.com/twbs/bootstrap/releases/download/v3.3.7/bootstrap-3.3.7-dist.zip
iginkgo18
2020/09/27
5390
Django+Bootstrap+Mysql 搭建个人博客(一)
1.1.环境搭建 (1)虚拟环境 mkvirtualenv website pip install django==1.11.7 (2)创建项目和app:website和blog (3)设置中文se
zhang_derek
2018/05/30
3.2K0
相关推荐
Django用户登录与注册系统
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档