背景:
因为在学习django框架知识,顺便记录下相关知识点。
仅仅是学习过程中的记录,没有系统性总结。
相关知识细节,请参考《玩转Django2.0》黄永祥著。 或者官方文档。
django环境
- 安装django: pip install Django
- 创建项目: 命令行下->django-admin startproject project_name (#eg. django-admin
startproject myWeb) - 创建应用: 命令行下-> cd myWeb -> python manage.py startapp app_name (#eg.
python manage.py startapp myApp) - 启动项目: python manage.py runserver 80(端口自己定义,80是http默认端口)
django配置
django的配置文件是项目根目录下的settings.py。
django url规则
django中的url配置在一个名为urls.py文件中。需要注意的是,在django项目中和应用中都有一个urls.py文件。
- 应用中的urls.py: 将属于该应用的URL都写入到该文件中。
- 项目中的urls.py: 统一管理每个应用的urls.py。如果你愿意,也可以直接写有效的URL,此时用法与应用中的urls.py一致。
通俗来说,项目中的urls.py像是一个包工头,应用中的urls.py是纯粹的打工人,包工头接到活了,就将活分派给某个打工人。即:
“当程序收到用户请求时,首选在项目中的urls.py查找该URL是属于哪个应用,然后再从应用中的urls.py找到具体的URL信息”。------引用自《玩转Django2.0》
带变量的URL
path('<year>/<int:month>/<slug:day>', views.mydate)
- <>符号设置变量。
- 格式如:<数据类型:变量名>
- 示例:、 int:month
- 当数据类型省略时,默认为str类型。
带正则表达式的URL
re_path("(?P<year>[0-9]{4}).html", views.myyear)
- re_path是django.urls中导入的方法
- ?P是固定格式
- 是django url变量编写规则
- [0-9]{4}是正则表达式匹配模式。详情请了解正则表达式语法规则。
path和re_path函数的name参数
re_path("(?P<year>[0-9]{4}).html", views.myyear, name='myyear')
name参数的含义是给URL取个别名,使得可以在html中通过别名引用该URL,如上示例,myyear将引用"(?P<year>[0-9]{4}).html"
。示例中URL包含year变量,所以在html中,需要将myyear赋值,该值即是year。
<div><a href="{% url 'myyear' 2099%}">2018 Archive</a></div>
a标签代表的URL信息是:\2099.html
path和re_path函数中的额外变量参数
前面有说URL中可以带变量,但这两个函数还可以接受一个字典参数,字典中的内容就是额外变量参数。
re_path("(?P<year>[0-9]{4}).html", views.myyear, {'month':'09'}, name='myyear')
这条URL有两个变量,分别是year , month。
所以视图函数myyear也需要两个参数。
def myyear(request, year, month):
return render(request, 'myyear.html', {'m':month})
myyear中的month参数来自re_path函数中的{‘month’:‘09’}。
render函数第三个参数{‘m’:month},接受month参数的值,并赋给字典key “m”,'m’将传递给myyear.html中模板变量。
<div><a href="{% url 'myyear' 2099%}">2018 {{ m }} Archive</a></div>
以上,a 标签的值就是 2018 09 Archive