django建站过程(4)创建文档显示页面

django建站过程(4)创建文档显示页面

    • 创建文档显示页面
      • 项目主文件夹schoolapps中的文件urls.py
      • 在APP“baseapps”中创建url.py文件
      • 编写视图
      • 模板继承
      • bootstrap
        • 创建head.html
        • 创建doclist.html
        • 创建docdetail.html
      • 使用 markdown 编辑器
        • 安装模块
        • Model 模型的documentes中定义修改:
        • 执行makemigrations与migrate完成数据迁移。
        • 保存markdown中图片路径
        • 修改views.py
        • 添加markdown到项目的urls文件
      • 修改url.py

创建文档显示页面

三个阶段:定义url,视图,模板

前面已创建过第一个页面,这里使用include(),方便以后的项目扩展

项目主文件夹schoolapps中的文件urls.py

from django.contrib import admin
from django.urls import path,include	#添加include

from baseapps.views import index
from baseapps import url			#添加“baseapps”下的url.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/',index),
    path('doc/',include(url)),		#映射“baseapps”下的url.py
]

在APP“baseapps”中创建url.py文件

from django.urls import path
from . import views			#导入views
urlpatterns = [

    path('',views.doclist)		#映射到doclist函数
]

编写视图

在views.py里添加doclist函数

def doclist(request):
    return render(request,"index.html")

在“baseapps”中创建文件夹templates,在其中新建一个文件index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
这是一个新的页面
</body>
</html>

测试页面是否正常,http://127.0.0.1:8000/doc,将看到刚才创建的网页

模板继承

{%block content%}{%en%}

bootstrap

全局 CSS 样式 · Bootstrap v3 中文文档 | Bootstrap 中文网 (bootcss.com)下载Bootstrap,在baseapps文件夹下创建static文件夹,下方创建css,img,js,plugins四个文件夹,将bootstrap放到plugins文件夹下

在组件 · Bootstrap v3 中文文档 中选择如下导航作网页顶部,

image-20231109142206707

创建head.html
{% load static %}
<head>
    <meta charset="UTF-8">
    <title>学校资源中心</title>
    <link href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.css' %}" rel="stylesheet">
    <link rel="stylesheet" type="text/css" href="{% static 'css/code.css' %}">
</head>
<body>
<nav class="navbar navbar-default">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand " href="#">廻雁阁</a>
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="active"><a href="/doc">校园信息 <span class="sr-only">(current)</span></a></li>
        <li><a href="doc">Link</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">One more separated link</a></li>
          </ul>
        </li>
      </ul>
      <form class="navbar-form navbar-left">
        <div class="form-group">
          <input type="text" class="form-control" placeholder="Search">
        </div>
        <button type="submit" class="btn btn-default">Submit</button>
      </form>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Link</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
          </ul>
        </li>
      </ul>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</nav>
{% block content %}
{% endblock %}



<script src="{% static 'js/jquery-3.6.0.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.min.js' %}"></script>
</body>
创建doclist.html

用来显示文档列表

{% extends 'head.html' %}

{% block content %}
    <div class="container">

        <div class="panel panel-default">
            <!-- Default panel contents -->
            <div class="panel-heading">
                <span class="glyphicon glyphicon-list" aria-hidden="true"> 资料列表</span>
                <ol class="breadcrumb">
                    {% for obj in topic_list %}
                        <li><a href="/doc/?p={{ obj.id }}">{{ obj.text}}</a></li>
                    {% endfor %}
                </ol>
            </div>

            <!-- Table -->
            <table class="table table-hover">
                <tbody>
                    {% for obj in data_list %}
                        <tr onclick="location.href='/doc/detail/?nid={{ obj.id }}'">
                            <td >
                                {{ obj.title|truncatechars:20 }}</td>
                        </tr>
                    {% endfor %}
                </tbody>
            </table>
        </div>
    </div>
{% endblock %}
创建docdetail.html

显示文档详情

{% extends 'head.html' %}

{% block content %}

    <div class="container">
        <div class="panel panel-default">
            <div class="panel-heading">
                <span class="glyphicon glyphicon-subtitles" aria-hidden="true"> 信息详情</span>
                <ol class="breadcrumb">
                    {% for obj in topic_list %}
                        <li><a href="/doc/?p={{ obj.id }}">{{ obj.text}}</a></li>
                    {% endfor %}
                </ol>
            </div>
            <div class="panel-body">
                <div class="text-center">
                            <h1>{{ doc_d.title }}</h1>

                            <span>{{ doc_d.date_added}}</span>
                        </div>
                <hr><p></p>
                        <div class="form-group">

                            {{ doc_d.doc_detail|safe}}

                        </div>
            </div>
        </div>
    </div>
{% endblock %}

使用 markdown 编辑器

安装模块
pip install django-mdeditor  # 用于后台编辑
pip install markdown # view视图中获取到数据库的数据,修饰为html语句,传到前端
pip install Pygments # 实现代码高亮
Model 模型的documentes中定义修改:
class documentes(models.Model):
    '''定义文档的结构'''
    topic = models.ForeignKey(topic, on_delete=models.CASCADE, verbose_name='主题类型')
    title = models.CharField(max_length=30, verbose_name='标题')
    date_added = models.DateTimeField(auto_now_add=True, verbose_name='时间')
    author = models.CharField(max_length=20, verbose_name='作者')
    text = models.TextField(verbose_name='摘要')
    doc_detail = MDTextField()  # 使用markdown
执行makemigrations与migrate完成数据迁移。

settings.pyINSTALLED_APPS 中添加APP ’mdeditor’

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'baseapps.apps.BaseappsConfig',     #或者使用 baseapps
    'mdeditor',

]
保存markdown中图片路径
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')  #新建一个uploads文件夹,且在项目目录下
MEDIA_URL = '/media/'   #你上传的文件和图片会默认存在/uploads/editor下 这一步不用创建任何文件夹

修改views.py
from django.shortcuts import render,HttpResponse
from baseapps.models import documentes,topic
import markdown
# Create your views here.
def index(request):
    return  HttpResponse("第一个页面!")
def doclist(request):
    topic_list = topic.objects.all()
    data_list = documentes.objects.all().order_by("-date_added")
    if request.GET.get("p"):
        p_id = int(request.GET.get("p"))
        s=topic.objects.get(id=p_id)
        print(s)
        data_list = documentes.objects.filter(topic=s).order_by("-date_added")
    contest = {"data_list": data_list,'topic_list':topic_list}
    return render(request, "doclist.html",contest)
def docdetail(request):
    topic_list = topic.objects.all()
    d_id=int(request.GET.get("nid"))
    doc_d=documentes.objects.get(id=d_id)
    doc_d.doc_detail = markdown.markdown(doc_d.doc_detail,
                                           extensions=[
                                               'markdown.extensions.extra',
                                               'markdown.extensions.codehilite',
                                               'markdown.extensions.toc',
                                           ]
                                           )
    contest={'doc_d':doc_d,'topic_list':topic_list}
    return render(request,'docdetail.html',contest)
添加markdown到项目的urls文件

添加图片路径

from django.contrib import admin
from django.urls import path,include

from baseapps.views import index
from baseapps import url
urlpatterns = [
    path('/mdeditor/',include('mdeditor.urls')),

    path('admin/', admin.site.urls),
    path('index/',index),
    path('doc/',include(url)),
    path('',include(url)),
]

from django.conf import settings
from django.conf.urls.static import static
#图片显示
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

修改url.py

from django.urls import path
from baseapps.views import doclist,docdetail
urlpatterns = [
    path('',doclist),
    path('detail/',docdetail),
]

至此,后端显示如下:

image-20231109145817222

简单的前端页面显示如下:

image-20231109145936284

详情页显示如下

image-20231109150032638

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/127017.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣每日一道系列 --- LeetCode 88. 合并两个有序数组

&#x1f4f7; 江池俊&#xff1a; 个人主页 &#x1f525;个人专栏&#xff1a; ✅数据结构探索 ✅LeetCode每日一道 &#x1f305; 有航道的人&#xff0c;再渺小也不会迷途。 文章目录 思路1&#xff1a;暴力求解思路2&#xff1a;原地合并 LeetCode 88. 合并两个有序数组…

基于安卓android微信小程序的校园互助平台

项目介绍 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整…

conda清华源安装cuda12.1的pytorch

使用pytorch官方提供的conda command奇慢无比&#xff0c;根本装不下来&#xff08;科学的情况下也这样&#xff09; 配置一下清华源使用清华源装就好了 清华源&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ 配置方法&#xff1a;conda config --…

自制数据集:点云变化

文章目录 说明代码 说明 在干净的点云数据集中加入噪声时&#xff0c;由于不同点云的尺寸不同&#xff0c;很难控制噪声的幅度。为此&#xff0c;需要将所有点云变换到 [ − 0.5 , 0.5 ] 3 [-0.5,0.5]^3 [−0.5,0.5]3的空间当中。如下图所示是两张示意图&#xff1a; 原始点云…

CSS时间线样式

css实现时间线样式&#xff0c;效果如下图&#xff1a; 一、CSS代码 .timeline {padding-left: 5px} .timeline-item { position: relative;padding-bottom: 20px;} .timeline-axis {position: absolute;left: -5px;top: 0;z-index: 10;width: 20px;height: 20px;line-he…

企业实施MES管理系统会增加哪些工作量

随着制造业的快速发展&#xff0c;越来越多的企业开始关注如何通过技术手段提高生产效率和质量。MES管理系统作为支撑企业生产管理的关键系统&#xff0c;受到很多企业的青睐。然而&#xff0c;对于是否部署MES管理系统&#xff0c;很多企业存在顾虑&#xff0c;担心其会增加工…

Git系列之Git入门级(带你走进Git的世界)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《Git实战开发》。&#x1f3af;&#x1f3af; &a…

YARN实战学习笔记

文章目录 YARN的由来YARN架构分析YARN资源管理模型YARN中的调度器案例&#xff1a;YARN多资源队列配置和使用 YARN的由来 从Hadoop2开始&#xff0c;官方把资源管理单独剥离出来&#xff0c;主要是为了考虑后期作为一个公共的资源管理平台&#xff0c;任何满足规则的计算引擎都…

jsonlite库编写代码示例

r # 导入jsonlite库 library(jsonlite) # 设置主机和端口 proxy_host <- proxy_port <- # 使用httr库创建一个对象 proxy <- create_proxy(proxy_host, proxy_port) # 使用httr库的GET方法下载网页内容 url <- "" response <- GET(url, proxy pr…

这份华为以太网接口配置命令太真香了!

【赠送】IT技术视频教程&#xff0c;白拿不谢&#xff01;思科、华为、红帽、数据库、云计算等等_厦门微思网络的博客-CSDN博客文章浏览阅读415次。风和日丽&#xff0c;小微给你送福利~如果你是小微的老粉&#xff0c;这里有一份粉丝福利待领取...如果你是新粉关注到了小微&am…

windows搭建本地MySQL服务

windows搭建本地MySQL服务 一、下载MySQL安装包 安装包地址 注意&#xff1a;别登录注册了&#xff0c;麻烦&#xff0c;直接下载&#xff01; 二、安装和配置 解压到喜欢的路径&#xff1a; 在MySQL包的根路径新建一个文件&#xff1a; 里面写啥呢&#xff1f;写配置呗 注…

达梦数据库-Win10安装

目录结构 前言达梦数据库达梦数据库适用场景达梦数据库 PK MySQL达梦数据库安装数据库下载解压下载的压缩文件安装详细步骤安装关键节点配置 DM管理工具启动DM管理工具DM管理工具连接达梦数据库 参考链接 前言 达梦数据库Win10系统安装整理&#xff1b; 达梦数据库 达梦数据库…

6.3二叉树的层序遍历(LC102,LC107-M)

二叉树的层序遍历&#xff08;LC102&#xff09;&#xff1a; 算法&#xff08;长度法&#xff09;&#xff1a; 需要借用一个辅助数据结构即队列来实现&#xff0c;队列先进先出&#xff0c;符合一层一层遍历的逻辑&#xff0c;而用栈先进后出适合模拟深度优先遍历也就是递归…

小型企业如何数字化转型?ZohoCRM助力小企业转型

小型企业数字化之路倍加艰难&#xff0c;其组织规模有限、资源有限&#xff0c;数字化布局或转型&#xff0c;也存在与数字平台匹配度的问题。其实小型企业可以通过CRM客户管理系统实现高效的客户关系管理&#xff0c;进一步提高市场竞争力。 建立高效易用的客户关系管理系统 …

程序员这个职业会在10年内被AI淘汰吗?

我认为程序员这个职业不会被AI淘汰&#xff0c;但程序员的工作内容会发生翻天覆地的变化。 回望历史的进程你就明白了&#xff1a;当纺纱机的出现带来了第一次工业革命&#xff0c;传统的纺织厂女工们陆续失业&#xff0c;但纺纱机并没有消失&#xff0c;而操作纺纱机的女工们…

带有密码的Excel只读模式,如何取消?

Excel文件打开之后发现是只读模式&#xff0c;想要退出只读模式&#xff0c;但是只读模式是带有密码的&#xff0c;该如何取消带有密码的excel只读文件呢&#xff1f; 带有密码的只读模式&#xff0c;是设置了excel文件的修改权限&#xff0c;取消修改权限&#xff0c;我们需要…

【MATLAB】设置图形透明度

1 Scatter散点图 % 设置散点大小 s.SizeData 100;散点标记符号设置如下&#xff1a; 在绘制散点图时&#xff0c;想设置透明度&#xff1a; 更改散点透明度后&#xff0c;图形如下&#xff1a; 相关绘图代码如下&#xff1a; figure(1) set(gcf, Units, figureUnits, Po…

Spring源码系列-框架中的设计模式

简单工厂 实现方式&#xff1a; BeanFactory。Spring中的BeanFactory就是简单工厂模式的体现&#xff0c;根据传入一个唯一的标识来获得Bean对象&#xff0c;但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。 实质&#xff1a; 由一个工厂…

为什么OpenAPI是未来企业数字化转型的决定性因素

随着数字经济不断发展升级&#xff0c;数据互通、万物互联正在逐步成为IT产业发展的主旋律&#xff0c;企业数字化转型也变得愈发紧迫。越来越多的企业都在数字化转型过程中寻求降本增效、加大创新力度、开展生态合作&#xff0c;以此来提高企业和产品的持续竞争力。而OpenAPI则…

漏洞复现--奇安信360天擎未授权访问

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…
最新文章