文章目录
1 实现一个功能总体的思路
1.1 先配置URL
这个url最好见名义,例如blog/index/1 这个url表示的blog这个app下的主页第一页。
1.2 然后写模板
1.确定用哪些数据,先不要管这些数据是怎么获得,直接用就行了。
2.注意DTL模板的排版格式,可以通过全选 ctrl+shift+f 进行格式化代码,使得模板看的层次分明。
3.先写的模板是一个最简单的模板,不需要考虑特殊情况,满足普遍情况的需求即可。
1.3 写视图函数
1.确定是否需要url传入参数,如果需要,必须使得url配置的变量和视图函数的参数名字完全相同。
2.视图函数向模板中传入的数据,是用字典的形式传入的,我喜欢以这样的排版方式传入数据字典。这样方便看和写注释/
return render(request, 'blog/index.html', {'articles': articles, # 当前分页的文章
'pages_num': range(1, pages_num + 1), # 从1到page_num的列表
'current_page': page, # 当前的页码
'previous_page': previous_page, # 下一页页码
'next_page': next_page,
})
1.4 逐步推进
逐步进行对模板和视图函数的增加功能,达到最后的效果。
1.5 注意的小知识点
- 关于项目路径当前的项目结构
(1)对于项目的所有的文件来说,项目的默认路径是整个项目的文件夹所在地。
例如 CSDN目录下的mysite项目下,有mysite目录和blog这个app目录。
/mysite/mysite/urls.py这个文件通常需要导入blog/urls,默认路径就是/mysite。可以直接from blog import views 更加方便。以默认路径写pycharm可能会提示报错不理解说这个路径找不到,不用管他,运行的时候就好了
#当前项目文件夹为默认路径
from blog import views
(2).表示当前目录,…表示上一层目录。
(3)在blog这个app的admin.py里导入模型类Article,此时默认的路径是整个项目。因此有两种导入方法
# 用当前所在目录导入
from .models import Article
# 用项目默认路径导入
from blog.models import Article
(4)普通的python程序里默认路径就是.。但是在Django里默认路径不等于.。默认路径就是当前项目所在文件夹,.表示当前文件所在的文件夹。
2 url配置
2.1 url配置的映射方法
1.项目的一级url直接映射到某个app的views.py下的某个函数。(不推荐这样使用)
(1) 有一个helloworld这个app,他的views.py下有这样的函数.
(2)项目urls.py里这样写
from helloworld.views import index
path('helloworld/', index),
2.项目的一级url映射到某个app的urls.py,二级目录映射到本app.views.py的某个函数。
(1)有一个blog这个app,他的views.py下有这样的函数。
(2)blog/urls.py里这样写表示二级url段。
(3)mysite/urls.py里这样写表示一级url段。
此时就不需要import语句了。
path('blog/', include(('blog.urls', "blog"), namespace="blog")),
(4)最后访问的可以是127.0.0.1/一级url段/二级url段/
2.2 url配置的各个参数
这里讨论的就是第二种url映射的方法。第一种方法很简单,第一个参数是url段,第二个参数是视图函数。
1.在项目urls.py里。
(1)第一个参数一级url段。
(2)第二个参数返回一个include对象。include((‘app名.url’,app名),namespace=‘自定义的命名空间。’)
2.在app的urls.py里
(1)第一个参数二级url段。
(2)第二个参数试图函数名。
(3)第三个参数url的名字,用于在app里确定一个特定的url名。
3.这样就可以在模板里通过 命名空间:app内的url名 唯一确定一个url。
2.3 url配置的函数
1.普通的path函数。
2.re_path函数。
(1)可以在url段里传递正则表达式。
(2)可以通过(?P<变量名>)向视图函数里传递变量
3 视图配置
3.1 函数参数
(1)request请求必须有。
(2)自定义的参数需要从url的正则表达式里传进来。
3.2 函数返回值
(1)返回静态页面。
(2)返回模板并且传递数据。
4 模板配置
4.1 常用的模板标记
1.变量使用。
2.if else endif语句。
{% if condition1 %}
... display 1
{% elif condiiton2 %}
... display 2
{% else %}
... display 3
{% endif %}
3.for in语句。
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
4.a标签的link属性。可以在url里通过 命名空间:url名字的方式指定跳转到的url,同时为他指定参数。
<li><a href="{% url 'blog:index' num %}">{{ num }}</a></li>
5.更多模板标记可以查看官方文档
链接
4.2 模板里表单的使用
1.表单的全局属性。
(1)action指定提交的页面
(2)method指定post还是get方法提交表单。
<form action="{% url 'blog:index' 1 %}" method="post" class="form-horizontal">
2.表单元素的组成。
会向指定页面提交一个表单,表单是以字典的方式存在的。键是name,值是对应的value
<input type="text" name="title" value="{{ article.title }}">
3.表单提交的效果。
可以通过视图函数对request的请求进行操作。
视图函数里通过request.POST获得提交的表单。
request.POST.get('title', '')
5. 模板的美化
5.1 Bootstrap导入
1.CDN导入
2.本地导入
5.2 项目里用到的Bootstrap样式
1.表单
2.上一页,下一页
3.分页
6.最后的项目管理
6.1 提交到github
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:HuangDDU/DjangoProjects.git
git push -u origin master
添加好项目文件夹后
git add .\mysite\
git commit -m "blog"
git push -u origin master