美文网首页
Django的urls路由分配及模板渲染方式

Django的urls路由分配及模板渲染方式

作者: 昆仑草莽 | 来源:发表于2019-06-27 11:02 被阅读0次

    在写作此章节前,我们必须要知道一件事。那就是,对于我们平常访问的网站,我们是通过什么去访问的呢,是怎么样通过网页链接得到后台服务器的数据呢。则会就要引入一个概念 url 。对于访问者,只要知道了url就可以访问到想要的资源。而对于服务者,只有设置好了url ,别人才能够去访问到。

    url设置

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

    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:锚点# 
    

    urls.py的作用:

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

    url例子:
    1、在项目目录urls.py文件下:

    from django.contrib import admin
    from django.urls import path,include
    from . import views
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('index/',views.index), #项目主路由
        path('aspx/<xxx>',views.aspx),  #带参数的项目主路由
    ]
    

    2、在项目目录创建了一个views.py文件:

    from django.http import HttpResponse
    
    def index(request):
        return HttpResponse('这是第一个连接')
    def aspx(request,xxx):
        return HttpResponse('我是项目主页面的aspx页面,我叫{}'.format(xxx))
    
    path的基本准则:
    默认支持的转换器:
    str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
    int,匹配正整数,包含0。
    slug,匹配字母、数字以及横杠、下划线组成的字符串。
    uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
    path,匹配任何非空字符串,包含了路径分隔符
    
    转换器的使用:
    re_path正则匹配:
    include的作用:

    一个project有一个总的urls.py,各个app也可以自己建立自己的urls.py,用include()函数在project的urls.py文件进行注册。

    from django.contrib import admin
    from django.urls import path,include
    from . import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('index/',views.index),
        path('aspx/<xxx>',views.aspx),
        path('books/',include('books.urls')),
        path('movies/',include('movies.urls')),
        path('models/',include('models.urls'))
    ]
    
    include例子:

    books 的app中urls设置

    from django.urls import path,include
    from . import views
    
    urlpatterns = [
        path('index/',views.index),
        path('aspx/',views.new_aspx,name='new_aspx')
    ]
    
    kwargs的作用:

    传递一个Python 字典作为额外的参数传递给视图函数。主urls.py文件

    from django.contrib import admin
    from django.urls import path,include
    from . import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('index/',views.index),
        path('aspx/<xxx>',views.aspx),
        path('books/',include('books.urls'),{'name':'apple'}),
    

    Kwargs为字典类型,可以传递额外的参数到views中,使用include的时候,需要统一给下面的url一些参数的时候显得尤其有用
    视图函数中可以通过关键字参数获取到。books的urls文件

    from django.http import HttpResponse
    
    # Create your views here.
    
    import datetime
    def index(request,**kwargs):
        if kwargs.get('name') == 'apple':
            print(datetime.datetime.now())
        return HttpResponse('这个book的首页!!带有kwargs参数')
    
    name的作用:

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



    App books中views设置:

    from django.http import HttpResponse
    
    def aspx(request,**kwargs):
        if kwargs.get('name') == 'apple':
            return redirect(reverse('new_aspx'))
        return HttpResponse('这是books的旧主页')
    
    def new_aspx(request):
        return HttpResponse('这是books的最新主页,欢迎欣赏!!!')
    

    App books 中urls文件设置:

    from django.urls import path,include
    from . import views
    
    urlpatterns = [
        path('index/',views.index),
        path('aspx/',views.new_aspx,name='new_aspx'),
    

    name参数可以给这个url取一个合适的名字。通过给url取名字,以后在view或者模板中使用这个URL,就只需要通过这个名字就可以了。这样做的原因是防止url的规则更改,会导致其他地方用了这个url的地方都需要更改,但是如果取名字了,就不要做任何改动了。

    Django模板渲染

    首先,Django 模板放在哪里呢?
    1、在主目录下创建一个templates目录用来存放所有的html的模板文件.
    2、templates目录里面在新建各个以app名字命名的目录来存放各个app中模板文件.


    setting.py中的模板路径配置:
    渲染模板

    1、直接将html字符串硬编码HttpResponse中

    def index(request):
        return HttpResponse('<h>这是一个段落</h>')
    

    2、django.template.loader 定义了函数以加载模板

    from django.template.loader import get_template
    from django.shortcuts import render, reverse,redirect
    from django.http import HttpResponse
    
    def index(request):
        v = get_template('books/index.html')
        html = v.render({'name':'apple'})
        return HttpResponse(html)
    

    3、使用render进行渲染。

    def index(request):
        return render(request,'books/index.html',{'name':'apple'})
    

    相关文章

      网友评论

          本文标题:Django的urls路由分配及模板渲染方式

          本文链接:https://www.haomeiwen.com/subject/axxlcctx.html