Django的url

映射

视图写完后,要与URL进⾏映射,也即⽤户在浏览器中输⼊什么url的时候可以请求到这个视图函数。在⽤户输⼊了某个url,请求到我们的⽹站的时候,
django会从项⽬的urls.py⽂件中寻找对应的视图。在urls.py⽂件中有⼀个urlpatterns变量,以后django就会从这个变量中读取所有的匹配规则。匹配规则需要使⽤django.urls.path函数进⾏包裹,
这个函数会根据传⼊的参数返回URLPattern或者是URLResolver的对象。
from django.contrib import admin
from django.urls import path
from django.http import HttpResponse


def index(request):
    return HttpResponse("hell Django")

urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/',views.boot),#普通路由需要写出绝对路径才能映射,视图
]

在这里插入图片描述

URL的模块化

在项⽬中,不可能只有⼀个app,如果把所有的app的views中的视图都
放在urls.py中进⾏映射,肯定会让代码显得⾮常乱。不方便我们进行查询,和排查可以在app内部包含⾃⼰的url匹配规则,⽽在项⽬的urls.py中再统⼀包含这个app的urls。使⽤这个技术需要借助include函数。

主路由文件中编写
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/', include('book.urls')),#指定需要路由寻找映射的路径
    
]
bookAPP中编写
from django.urls import path
from . import views
from django.urls import converters

urlpatterns = [
    path('<int:book_id>',views.book1),
    path('book2/', views.book2),
]

当有多个App并且app中功能名称一样时就容易出现问题为应对此类问题可以把多个APP给各自隔离起来只会调用有关的项

url命名与反转

1.为什么需要URL命名
因为在项⽬开发的过程中URL地址可能经常变动,如果写死会经常去修改
2.如何给⼀个URL指定名称
path("",views.index,name="index")
3.应⽤命名空间
在多个app之间可能产⽣同名的URL,这时候为了避免这种情况,可以使⽤
命名空间来加以区分。在urls.py中添加app_name即可。

如果需要给app——url重新命名

urlpatterns = [
    path('',views.index),

    path('sgin/',views.login,name='login'),#name=  把所有login字段的访问这个app的记录全
    #部映射名字随便改
    并给URL指定一个名称

应用空间命名

主路由文件
from django.contrib import admin
from django.urls import path,include
import book
urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/', include('book.urls')),
    path('cms/', include('cms.urls')),
    path('front/',include('front.urls')),
    path('cms1/', include('cms.urls',namespace='cms1')),
    path('cms2/', include('cms.urls',namespace='cms2')),
    path('news/', include('news.urls')),
]
app路由文件
from django.urls import path
from . import views
app_name = 'cms'
urlpatterns = [
    path('',views.index),

    path('sgin/',views.login,name='login'),
    path('news/<news_id>',views.news,name='news'),

]

URL反转传递参数

如果这个url中需要传递参数,那么可以通过kwargs来传递参数。

主路由
from django.contrib import admin
from django.urls import path,include
import book
urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/', include('book.urls')),
    path('cms/', include('cms.urls')),
    path('front/',include('front.urls')),
    path('cms1/', include('cms.urls',namespace='cms1')),#不同功能访问相同视图
    path('cms2/', include('cms.urls',namespace='cms2')),
    path('news/', include('news.urls')),
 ]
 app路由cms
 from django.urls import path
from . import views
app_name = 'cms'
urlpatterns = [
    path('',views.index),

    path('sgin/',views.login,name='login'),
    path('news/<news_id>',views.news,name='news'),
  ]
 视图
def index(request):
    current_namespace = request.resolver_match.namespace
    name = request.GET.get('name')
    if name:
        return HttpResponse("后台首页")
    else:
        # return redirect('cms:login')
        return redirect(reverse('cms:news',kwargs={'news_id':1}))
        return redirect(reverse('cms:login') + '?name=jzj')#给路由添加变量跳转

指定默认的参数

主路由
from django.contrib import admin
from django.urls import path,include
import book
urlpatterns = [
 	path('news/', include('news.urls')),
]


app路由
from django.urls import path
from . import views
from django.urls import converters

urlpatterns = [
    path('',views.index),#没有参数
    path('<page>', views.index),#有参数
]


视图
from django.shortcuts import render,redirect,reverse
from django.http import HttpResponse

# Create your views here.
def index(request,page=1):#默认指定参数1
    return HttpResponse('新闻第是%s篇' % page)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值