Django2 URL配置

函数、类的URL定义

"""mysite URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r‘^$‘, views.home, name=‘home‘)
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r‘^$‘, Home.as_view(), name=‘home‘)
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r‘^blog/‘, include(‘blog.urls‘))
"""
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    # 视图为函数,定义URL
    url(r‘^index/‘, views.index),
    # 视图为类,定义URL
    url(r‘^home/‘, views.Home.as_view()),
]

路由匹配

URL有很多种类型,一个URL可以对应一个视图或者类,也可以用正则表达式的方法定义URL去匹配一类的URL

一对一的URL

from django.conf.urls import url
from django.contrib import admin
 from app01 import views
urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    # 视图为函数,定义URL
    url(r‘^index/‘, views.index),
    # 视图为类,定义URL
    url(r‘^home/‘, views.Home.as_view()),
]

一对多的URL

通过GET方法传参

http://127.0.0.1:8000/detail/?nid=1

http://127.0.0.1:8000/detail/?nid=2

http://127.0.0.1:8000/detail/?nid=3

url(r‘detail‘, views.detail),

urls.py

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 = request.GET.get("nid")
    detail_info = USER_DICT[nid]
    return render(request, "detail.html", {"detail_info": detail_info})

views.py

<ul>
{% for k, row in user_dict.items %}
 <li><a target="_blank" href="/detail/?nid={{ k }}">{{ row.name }}</a></li>
{% endfor %}
</ul>

index.html

<h1>详细信息</h1>
<h6>用户名:{{ detail_info.name }}</h6>
<h6>邮箱:{{ detail_info.email }}</h6>

detail.html

通过正则方法,动态传参,这种定义方式形参和实参的位置要一致

http://127.0.0.1:8000/detail-1.html

http://127.0.0.1:8000/detail-2.html

http://127.0.0.1:8000/detail-3.html

url(r‘^detail-(\d+).html‘, views.detail),

urls.py

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})

views.py

<ul>
    {% for k, row in user_dict.items %}
        <li><a target="_blank" href="/detail-{{ k }}.html">{{ row.name }}</a></li>
    {% endfor %}
</ul>

index.html

<h1>详细信息</h1>
<h6>用户名:{{ detail_info.name }}</h6>
<h6>邮箱:{{ detail_info.email }}</h6>

detail.html

通过正则方法,动态传参,这种方式相当于关键字参数,形参和实参的位置可以不一致

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

urls.py

多参数可以写成

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

# 以第一种方式传递的参数,都会传递到*args中
url(r‘^detail-(\d+)-(\d+).html‘, views.detail),

# 以第二种方式传递的参数,都会传递到**kwargs中
url(r‘^detail-(?P<nid>\d+)-(?P<uid>\d+).html‘, views.detail),

URL命名

URL路由对应的名称 name=xxx,对URL路由关系进行命名,可以根据此名称生成自己想要的URL

通过URL对应的名称,action会自动匹配URL,修改URL的时候就不用每次修改完还要再改HTML中的URL了

url(r‘^index/‘, views.index, name="index"),
<form action="{% url "index" %}" method="POST">
        <p><input type="text", name="user", placeholder="用户名"/></p>
        <p><input type="text", name="email", placeholder="邮箱"/></p>
        <input type="submit" value="提交">
</form>

URL命名空间

mysite下的urls.py, namespace设置命名空间

from django.conf.urls import url
from django.contrib import admin
from django.conf.urls import include
from app01 import views

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^a/‘, include(‘app01.urls‘, namespace="author")),
    url(r‘^b/‘, include(‘app01.urls‘, namespace="publisher")),
]

urls.py

app01下的urls.py

from django.conf.urls import url
from django.contrib import admin
from app01 import views

app_name = "app01"

urlpatterns = [
    url(r‘^index/‘, views.index, name=‘index‘),
]

urls.py

views.py 在视图中使用, reverse反转时"namespace:name"

from django.shortcuts import render
from django.shortcuts import HttpResponse
# Create your views here.
from django.urls import reverse

def index(request):
    v = reverse("author:index")
    print(v)
    return HttpResponse("OK")

views.py

模板中使用

{% url namesapce: name%}

index.html


URL和模板的对应关系

url(r‘^test/‘, views.index, name="test"),
url(r‘^test/(\d+)/(\d+)/‘, views.index, name="test"),
url(r‘^test/(?P<nid>\d+)/(?P<uid>\d+)/‘, views.index, name="test"),

urls.py

{% url "test" %}
{% url "test" 1 2 %}    # url为/test/1/2/    参数要按照顺序
{% url "test" uid=9 nid=4 %} # url为/test/4/9/    参数可以不按照顺序

test.html


URL和视图的对应关系

url(r‘^test/‘, views.index, name="test"),
url(r‘^test/(\d+)/(\d+)/‘, views.index, name="test"),
url(r‘^test/(?P<nid>\d+)/(?P<uid>\d+)/‘, views.index, name="test"),

urls.py

from django.urls import reverse 

def test(request, *args, **kwargs):
    v = reverse("index")
    return render(request, "test.html", {"url": v})

def test(request, *args, **kwargs):
    v = reverse("index", args=(1,2,))

    return render(request, "test.html", {"url": v})    

def test(request, *args, **kwargs):
    v = reverse("index", kwargs={"nid": "3", "uid": "4"})
    return render(request, "test.html", {"url": v})

views.py

<form action="{{ url }}" method="POST">
    <p><input type="text", name="user", placeholder="用户名"/></p>
    <p><input type="text", name="email", placeholder="邮箱"/></p>
    <input type="submit" value="提交">
</form>

test.html


URL设置默认值

from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^index/‘, views.index, {"name": "root"}),
]

urls.py

from django.shortcuts import render
from django.shortcuts import HttpResponse
# Create your views here.
from django.urls import reverse

def index(request, name):
    print(name)
    return HttpResponse("OK")

views.py


路由分发

通过工程下面的urls.py去分发路由,将不同后缀的URL分发给不同的app

from django.conf.urls import url
from django.contrib import admin
from django.conf.urls import include

urlpatterns = [
    url(r‘^cmdb/‘, include("app01.urls")),
    url(r‘^monitor/‘, include("app02.urls")),
]

工程下面的urls.py

from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r‘^login/‘, views.login),
]

app01 urls.py

from django.conf.urls import url
from django.contrib import admin
from app02 import views

urlpatterns = [
    url(r‘^login/‘, views.login),
]

app02 urls.py

时间: 2024-08-04 21:54:27

Django2 URL配置的相关文章

python测试开发django-3.url配置

前言 我们在浏览器访问一个网页是通过url地址去访问的,django管理url配置是在urls.py文件.当一个页面数据很多时候,通过会有翻页的情况,那么页数是不固定的,如:page=1. 也就是url路径里面带参数时候如何去处理呢? urls.py配置规则 由于django版本比较多,在查资料时候,也会看到不同的版本用不同写法,对于初学者来说是比较迷惑的, 总结了下,主要有三个:path.re_path.url,接下来具体分析下这三个有什么区别. path 只能绝对匹配路径地址,不支持正则匹配

django-3.url配置

前言 我们在浏览器访问一个网页是通过url地址去访问的,django管理url配置是在urls.py文件.当一个页面数据很多时候,通过会有翻页的情况,那么页数是不固定的,如:page=1.也就是url路径里面带参数时候如何去处理呢? urls.py配置规则 由于django版本比较多,在查资料时候,也会看到不同的版本用不同写法,对于初学者来说是比较迷惑的,总结了下,主要有三个:path.re_path.url,接下来具体分析下这三个有什么区别. path 只能绝对匹配路径地址,不支持正则匹配 r

Django中的URL配置和模板

Django中的URL配置 : 实例: Python代码   urlpatterns = patterns('', # Example: # (r'^myweb/', include('myweb.foo.urls')), # Uncomment the admin/doc line below and add 'django.contrib.admindocs' # to INSTALLED_APPS to enable admin documentation: # (r'^admin/doc

微信支付开发1 微信支付URL配置

本文介绍微信支付申请时如何设置授权目录及URL. 一.选择支付类型 目前有两种支付类型 JS API网页支付 Native原生支付 如果没有特殊要求,两种都勾选. 二.支付授权目录 目前可以选择http还是https协议,没有特别要求,选择http.对安全要求比较高的企业,请选择https. 支付授权目录填写自己公司的域名加上目录,目录可以是不存在的目录,例如wxpay. 一个完整的目录参考如下: http://www.doucube.com/wxpay/ 蓝色部分表示要选择的. 红色部分表示要

微信公众平台开发(101) 微信支付URL配置

本文介绍微信支付申请时如何设置授权目录及URL. 一.选择支付类型 目前有两种支付类型 JS API网页支付 Native原生支付 如果没有特殊要求,两种都勾选. 二.支付授权目录 目前可以选择http还是https协议,没有特别要求,选择http.对安全要求比较高的企业,请选择https. 支付授权目录填写自己公司的域名加上目录,目录可以是不存在的目录,例如wxpay. 一个完整的目录参考如下: http://www.doucube.com/wxpay/ 蓝色部分表示要选择的. 红色部分表示要

Django中的 动态URL配置

举个例子,一家在线书店会为每一本书提供一个URL,如:/books/243/./books/81196/. 让我们创建第三个视图来显示当前时间和加上时间偏差量的时间,设计是这样的: /time/plus/1/ 显示当前时间+1个小时的页面 /time/plus/2/ 显示当前时间+2个小时的页面 /time/plus/3/ 显示当前时间+3个小时的页面,以此类推. 新手可能会考虑写不同的视图函数来处理每个时间偏差量,URL配置看起来就象这样: urlpatterns = patterns('',

Django——如何处理请求(URL配置和视图)

URLconfig—— 为了绑定视图函数和URL,我们使用URLconf. URLconf 就像是 Django 所支撑网站的目录. 它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表. 你就是以这种方式告诉 Django,对于这个 URL 调用这段代码,对于那个 URL 调用那段代码. 例如,当用户访问/foo/时,调用视图函数foo_view(),这个视图函数存在于Python模块文件view.py中. 当访问 URL /hello/ 时,Django 根据 ROOT

Django -- 视图和URL配置

一个人行走的范围,就是他的世界:    -- 北岛<青灯> 一个人吟唱的语调,就是他的生活.    -- 小Q<小曲> ------------------------------------------------------------------------------------------------- 前一节我们建立了一个Django项目,这一节我们来了解视图和url的关系: [第一个视图 根目录] 当我们搭建好django时,urls.py内没有url,我们会看到一个

视图的URL配置,找不到我设置的第一个Page

问题:视图的URL配置,找不到我设置的第一个Page 我的代码如下: 结果访问/test/时说找不到这个page 原因:patterns方法的参数有两个,一个是prefix,一个是参数元祖,详见下图,因为我的patterns里少加了一个空的'',它将我写的第一个url单过prefix参数了. 解决办法:在patterns中先加入一个参数'',如下图: