网站首页 文章专栏 来聊聊django1.8的urls 常用规则和参数命名
来聊聊django1.8的urls 常用规则和参数命名
编辑时间:2018年11月7日 16:18 作者:赵彦昌 浏览量:64

今天来和大家聊聊 python 的web 框架 django 的 url 匹配规则

再整理的过程,也能再温习一下,很喜欢 这个过程 。分享给他人,让别人从中获到益处。随便不忘给我留个言,告诉我很受用,是对我最大的鼓励


阅读该文章需要有那么一丢丢django 基础



首先,先整理下理论,接下来再实践。

注: 本文用的版本为 python 3.5 django 1.8

未来,我会对django2.0 的url 匹配规则给大家做一个介绍


  • 若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。
  • 不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
  • 每个正则表达式前面的'r' 是可选的但是建议加上。它告诉Python 这个字符串是“原始的” —— 字符串中任何字符都不应该转义。参见Dive Into Python 中的解释。


下面直接上代码,自己看,有注释


urls.py

from django.conf.urls import include, url
from django.contrib import admin
from testurls import views

# 后面加上 '/$' django 会强制在url 加上 '/'
# 比如: 输入http://127.0.0.1:8000/2018/01   按回车再看url 会在后面加上 '/'

urlpatterns = [
    # 首页
    url(r'^$', views.index),
    # 文章列表
    url(r'^articles/list',views.articlelist),
    # 按年份获取文章列表 {4}  表达只能是四个数字
    url(r'^articles/([0-9]{4})/$', views.articleyeara),
    # 按月份获取文章列表 {2}  表达只能是二个数字
    url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.articlemonthb),
    # 你可能有这样的需求,想给url 参数命名,像下面这样 '+' 代表匹配 1个到无数个
    url(r'^article/(?P<id>[0-9]+).html', views.articlecontent),
    # 两个命名参数,再在views 打乱顺序获取
    url(r'^articles/page(?P<page>[0-9]+)/(?P<num>[0-9]+)', views.articlepagelist),
    # 按文章分类查找文章列表
    url(r'^articles/label-(?P<label>\w+)/$', views.articlelabel),
    # url(r'^admin/', include(admin.site.urls)),
]

views.py

from django.http import HttpResponse

def index(request):
    return HttpResponse('index')

def articlelist(request):
    return HttpResponse('articlelist')

# 传过来的参数都是字符串类型

def articleyeara(request, a):
#  参数a 可为任意合法字符串
    return HttpResponse(a + '年文章列表')

def articlemonthb(request,a, b):
#  参数a, b  可为任意合法字符串, 按url 顺序赋值
    return HttpResponse(a + b + '月文章列表')

def articlecontent(request, id):
    # 该参数year 必须 固定为year
    return HttpResponse('id 为' + id + '的文章内容文章列表')

def articlepagelist(request, num, page):
    return HttpResponse('第' + page + '页,共获取到' + num + '文章')

def articlelabel(request, label):
    return HttpResponse('标签为' + label + '文章列表')



想亲自试试运行结果 的同学,可在github 上面克隆下来运行实践

地址:https://github.com/zycfcn/django18urls










来说两句吧
最新评论