• Django 02 url路由配置及渲染方式


    Django 02 url路由配置及渲染方式

    一、URL

     

    #URL
    #(Uniform Resoure Locator) 统一资源定位符:对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。
    互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它

      格式

    http://127.0.0.1:8000/hello/
    
    #url解释
    schema://host[:port#]/path/.../[?query-string][#anchor]
    
    schema #指定使用的协议(例如:http,https,ftp)
    host  #Http服务器的ip地址或者域名
    port  #端口号,http默认的是80端口
    path  #访问资源的路径
    query-string #发送给http服务器的数据
    anchor  #锚点

      url.py的作用

    #该文件就是URL配置(URLconf),就像是Django所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表。以这样的方式告诉Django,对于那个URL调用那段代码。
     url的加载就是从配置文件中开始的

      怎么获取变量

    #1、在view.py(视图)中定义函数,参数里面添加xx,return里面字符串拼接xx
    def hello(request,xx):
        return HttpResponse('啦啦啦啊,%s'%xx)
    
    #2、在url.py里面添加path,前面加上xx
        path('hello2/<xx>/', views.hello)

      如果需要对变量有所要求,可以进行类型转换

        path('hello2/<int:xx>/', views.hello)#在设置path里面添加上int,就只能输入int类型,这是对xx进行强制类型转换
    
    #总共可以放入5种类型
    str#匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
    int#匹配正整数,包含0。
    slug#匹配字母、数字以及横杠、下划线组成的字符串。
    uuid#匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
    path#匹配任何非空字符串,包含了路径分隔符

      path里面的正则设置,需要使用re_path

        re_path('^hello/(?P<yy>d+)/$',views.hello) #使用正则

     二、include、kwargs、name

      include  为了使app里面的视图函数有自己的url,在项目的url.py里面添加include,简而言之,路由分配

    #在项目的url上面添加一条path  
      path('book/',include('book.urls')) #在主路由添加path表示book这个app下面的分路由
    
    #在book这个app里面添加一个urls.py,它关联的是当前目录也就是book目录下的view.py
    
    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('index/',views.index)
    ]
    
    #模式跟项目urls的模式一样
        

      kwargs 传递一个Python字典作为额外的参数传递给视图函数,视图函数可以通过关键字参数获取到

        path('index/<xx>',views.index,{'switch':'true'}) #在最后面添加字典,主路由的字典可以共享给app子路由,字典里面可以是多个值
    
    from django.http import HttpResponse
    import datetime
    
    def index(request,xx,**kwargs):
        print(xx)
        print(kwargs)
        if kwargs.get('switch') == 'true': #在需要用到字典是的时候就可以直接用这个来获取值
            print(datetime.datetime.now())
        return HttpResponse('这是book页面的主页!!!')

      name  给一个匹配的url地址取名字,一般用于模板,也可以使用reverse进行网页重定向

        path('old',views.old),
        path('new',views.new,name='new'),
    
    
    def old(request):
        # return HttpResponse('这是老的页面') #原页面
        return redirect('/book/new') #方法一:页面重定向,也就是返回到另外一个路由,用redirect跳转路由
        return redirect(reverse('new')) #方法二:在上面已经定义了新路由的名字为new,直接用reverse解析name,redirect跳转
    
    def new(request):
        return HttpResponse('这是新的页面')

    三、模板渲染

    #1、在项目目录下创建一个templates目录
    
    #2、在项目settings.py第57行输入路径
    os.path.join(BASE_DIR,'templates')
        path('index1', views.book_index1),
        path('index2/<xx>', views.book_index2),
    
    
    
    from django.template.loader import get_template
    def book_index1(request):#老方法,现在不用这个了,太麻烦
        t = get_template('book/index.html') #获取模板赋值给t
        name = 'taka'
        html = t.render({'name':name}) #将变量传进去
        return HttpResponse(html)
    
    def book_index2(request,xx):
        name = 'takadasdsa'
        return render(request,'book/index.html',
                      context={'name':'taka', #传字典
                               'age':xx,     #传变量
                               }
                      )        
  • 相关阅读:
    Linq与Lambda,神一般的工作效率
    svn和git孰优孰劣
    关于C++的***5的输出问题
    POJ 3469 Dual Core CPU(最小割)
    HDU 4259 Double Dealing
    最大流Dinic算法
    HDU 4442 Physical Examination(2012年金华赛区现场赛A题)
    int ,long , long long类型的范围
    POJ 1679 The Unique MST(判断最小生成树是否唯一)
    HDU 4280 Island Transport(网络流)
  • 原文地址:https://www.cnblogs.com/xuchengcheng1215/p/9332265.html
Copyright © 2020-2023  润新知