Django框架学习笔记(7.基于正则表达式的URL)

创建Django工程,配置完成,创建APP


urls.py


from django.conf.urls import url
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),
    url('^detail-(\d+).html', views.detail),
]


views.py

from django.shortcuts import render
from django.shortcuts import redirect

# Create your views here.

USER_DICT = {
    '1': {'name': 'root1','email': '[email protected]'},
    '2': {'name': 'root2','email': '[email protected]'},
    '3': {'name': 'root3','email': '[email protected]'},
    '4': {'name': 'root4','email': '[email protected]'},
    '5': {'name': 'root5','email': '[email protected]'},
}



def index(request):
    return render(request, 'index.html', {'user_dict':USER_DICT})

def detail(request,nid):
    detail_info = USER_DICT[nid]
    return render(request, "detail.html", {'detail_info': detail_info})

index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<ul>
    {% for k,row in user_dict.items %}
        <li><a target="_blank" href="/detail-{{ k }}.html">{{ row.name }}</a></li>
    {% endfor %}
</ul>
</body>
</html>


detail.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>详细信息</h1>
<h6>用户名:{{ detail_info.name }}</h6>
<h6>邮箱:{{ detail_info.email }}</h6>
</body>
</html>



运行:

Django框架学习笔记(7.基于正则表达式的URL)

点击后,以及新的URL:

Django框架学习笔记(7.基于正则表达式的URL)




URL要传递多个数据时候,严格按照顺序传递的,并且函数定义必须有相应个数的参数,

可以这样写改变顺序:

url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+)', views.detail),

def detail(request, nid, uid):

写成这样后可以穿任意个数参数:

def detail(request, *args, **kwargs):

建议使用这种方式