「Python学习日记」Django打造属于自己的导航页的过程记录(1)
因为在第一篇里面我们已经做过了简单的分析了,下面就直接进入正题吧。
一、创建项目(pycharm创建的方法之前已经详细说过了)
创建名为Navigation的项目,创建完毕后再在项目根目录下创建一个名为:static的文件夹(用于存放JS和CSS),把搜索到的导航的index复制到templates文件夹,js和css以及图片放到static文件夹中,如图:
二、修改配置文件(NavigationNavigationsettings.py)
由于是pycharm创建的,项目也不大,就现在自带的sqlite3就行。
所以就修改如下代码:
# 设置语言和时区LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'STATIC_URL = '/static/'# 这句没有,要自己加上,STATICFILES_DIRS就是静态文件的路径STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)
三、models:(Navigationagamodels.py)
由于上篇已经做了分析,我们就直接开始定义了,代码如下:
from django.db import models# Create your models here.# Classif和Category共用的字段类class Share(models.Model): isshow = models.BooleanField(verbose_name="是否显示", default=True) sort = models.IntegerField(verbose_name="排序", default=0) updata_time = models.DateTimeField(verbose_name="更新时间", auto_now = True) add_time = models.DateTimeField(verbose_name="添加时间", auto_now_add = True) class Meta: # 表示为抽象类,不生成代码,这里只做继承用 abstract = True# 继承自Share,由于Share继承自models.Model,所以这里就不用再继承了class Classif(Share): name = models.CharField(verbose_name="分类", max_length=10, null=False, unique=True) # Meta和__str__之前都有说过,这里就不重复了 class Meta: verbose_name = "导航分类" verbose_name_plural = verbose_name def __str__(self): return self.nameclass Category(Share): name = models.CharField(verbose_name="名称", max_length=255, null=False) address = models.CharField(verbose_name="地址", max_length=255, null=False) # 设置外键,与Classif关联节气 fork = models.ForeignKey(to=Classif, on_delete=models.CASCADE) class Meta: verbose_name = "导航地址" verbose_name_plural = verbose_name def __str__(self): return self.name
四、生成迁移代码和迁移数据
# 生成迁移代码python manage.py makemigrations# 迁移数据python manage.py migrate
五、做导航的首页:(Navigationemplatesindex.html)
把没用的给删掉(想要源码的可以私信我,太长了,就不贴出来了),修改一下
主要修改的是:
# 这两行配置JS和CSS的路径# 图片的路径 # 把多余的div删掉,我们用for循环# 注意不要删多了哦
{% for classif in classifs %}
{{ classif.name }}
# 一查多的方法,classif.category_set.all # classif 是分类 # category_set获取属于上面分类的导航地址 # category是models定义的Category类第一个字母小写,加上_set {% for cat in classif.category_set.all %}
{{ cat.name }}
{% endfor %}
{% endfor %}
# 还有一点不一样,就是js中图片的路径,我折腾了老半天才发现: var search = { data: [{ name: '百度', # 5个搜索引擎的图标 img: '/static/images/logo.jpg', ...........
六、配置urls(NavigationNavigationurls.py)
from django.contrib import adminfrom django.urls import pathfrom naga import viewsurlpatterns = [ path('admin/', admin.site.urls), path('', views.index),]
七、配置views(Navigationagaviews.py)
from django.shortcuts import renderfrom .models import *def index(request): classifs = Classif.objects.filter(isshow=True).all() return render(request, "index.html", locals())
到此代码就全部敲完了,下面添加点数据
八、添加管理面账户
之前有说,这里就不再重复了:如图
九、启动服务器
python manage.py runserver
十、在管理员后台添加一些数据
这个具体就不演示了。非常简单
十一、网站建成
看看长什么样子:
我添加的分类就一个,地址两个,看着太少了,大家可以把常用的都加进去。
到此项目完成,大家可以也照着做一遍,虽说简单,起码也是一个提升。
有问题和建议可以告诉我,我们大家一起交流