Django-2.url路由及模板渲染方式
Django-2.url路由及模板渲染方式

Django-2.url路由及模板渲染方式

一、url基本概念及格式

1.URL的引入

  • 访问者:知道了url就可以进去访问
  • 服务者:设置好url,别人才可以访问到

    2.路由URL定义

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

    3.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:锚点
      在这里插入图片描述

二、path和re_path

1.path基本规则

path('test/<xx>/',views.test)
  • 使用尖括号<>从URL中捕获值
  • 包含一个转化器类型(converter type)
  • 没有转换器,将匹配任何字符串,当然也包括了/字符
  • 当前面的url匹配成功后,就会调用后面的视图函数

    2.默认支持的转换器(前三个用的多)

    • str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
    • int,匹配字母、数字以及横杠、下划线组成的字符串。
    • uuid,匹配格式化uuid,如075194d3-6685-417e-a8a8-6c931e272f00
    • path,匹配任何非空字符串,包含了路径分隔符

    默认是str形式,如有需要,按如下格式进行选择:
    path('hello///',views.test1)

urls.py:

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/',views.index),
    path(r'hello/<name>/',views.test1),
    path(r'hello/<name>/<int:age>/',views.test2),
    #<name>/<int:age>或者<name>,<int:age>均可正常访问,路由地址发生相同变化
]

views.py:

from django.http import HttpResponse

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

def test1(request,name):
    return HttpResponse(f"你好,我叫{name}")

def test2(request,name,age):
    return HttpResponse(f"{name}今年{age}岁。")

在这里插入图片描述

3.转换器的使用

  1. 设置url:
    path('test/<int:xx>',views.test3)
  2. 在视图中将获取到的参数和参数的类型打印出来
    def test3(request,xx):
    print(xx,type(xx))
    return HtppResponse('hello %s'%xx)

    4.re_path正则匹配

    
    re_path("^hello/$",views.test5),

re_path("^hello/(?P<yy>[0-9]+/)",views.test6)

def test5(request):
return Httpreponse('这里用的re_path设置的')

def test5(request,yy):
print(yy,type(yy))
return Httpreponse("hello %s"%yy)


代码如下(ulrs.py):

```python
from django.contrib import admin
from django.urls import path,re_path
from . import views

urlpatterns = [
    path(&#039;admin/&#039;, admin.site.urls),
    path(&#039;index/&#039;,views.index),
   # path(r&#039;hello/<name>/&#039;,views.test1),
   # path(r&#039;hello/<name>/<int:age>/&#039;,views.test2),
   re_path(&#039;^hello/(?P<name>[a-z]{4,8})/(?P<age>[0-9]{1,3})/&#039;,views.test2)
]</code></pre>
<h2>5.include的作用</h2>
<ul>
<li>一个project有一个总的urls.py,各个App也可以建立自己的urls.py</li>
<li>
<p>用include()函数在project的urls.py文件进行注册</p>
<p><strong>include例子:</strong></p>
<pre><code>项目目录下的主urls.py
from django.contrib import admin
from django.url import path,include
from . import views
urlpatterns = [
path('admin/',admin.site.urls),
path('book/',include('book.urls')),
]</code></pre>
<p><font color=#ff0000  face='微软雅黑' >book&music/ulrs.py:</p>
<pre><code class="language-python">
from django.urls import path
from . import views</code></pre>
</li>
</ul>
<p>urlpatterns=[
path(&#039;index/&#039;,views.index)</p>
<p>]</p>
<pre><code><font color=#ff0000  face='微软雅黑' >book&music/views.py:
```python
from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    return HttpResponse('这个是book/music的主页')

6.kwargs的作用

  • 传递一个python字典作为额外的参数传递给视图函数
  • ——在主路由中,给所有子路由传递参数
  • ——kwargs为字典类型,可以传递额外的参数到views中,使用include的时候,需要统一给下面的url一些参数的时候显得尤为有用。
    在这里插入图片描述- 视图函数接收:
    ... ...
    def index(request,**kwargs):
        print(kwargs。get('switch'))
        return HttpResponse('这个是book的主页')

    7.name的作用——页面重定向

  • 给一个匹配的url地址取名字
  • 一般用于模板,也可以使用reverse进行重定向
    在这里插入图片描述
  • book\urls.py:
    
    from django.urls import path
    from . import views

urlpatterns=[
path('index/',views.index),
path('article/', views.article),
path('article_new/', views.article_new, name='article_new'),
]

 - book\views.py:
```pyhton
from django.shortcuts import render,redirect,reverse
from django.http import HttpResponse

# Create your views here.
def index(request):
    return HttpResponse('这个是book的主页')

def test1(request,name,age,**kwargs):
    return HttpResponse('你好,我叫{},今年{}岁'.format(name,age))

def article(request):
    return redirect(reverse('article_new'))

def article_new(request):
    return HttpResponse('这是新的网站首页')

在这里插入图片描述

<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

三、模板路径配置

1在主目录下创建一个templates目录用来存放所有的模板文件。

2templates目录里面再新建各个以App名字命名的目录来存放各个App中的模板文件。

在这里插入图片描述

3settings.py中模板路径配置

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

四、模板渲染方式

1. 直接将html字符串编码HTTPResponse中

 def index_1(request):
    return HttpResponse('

Hello Django!

')

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

views.py

 from django.template.loader import get_template
 def index_2(request,xx):
    t = get_template('music/index.html')
    html = t.render({'music_name':xx})
    return HttpResponse(html)
##############################
#如果没有参数:
 def index_2(request):
    t = get_template('music/index.html')
    html = t.render()
    return HttpResponse(html)

urls.py

from django.urls import path
from . import views

urlpatterns=[
        path('index/',views.index),
        path('article/', views.article),
        path('article_new/', views.article_new, name='article_new'),
        path('bilibili/', views.bilibili),
]
##########################
#如果没有参数:
urlpatterns=[
        path('index/',views.index),
        path('article/', views.article),
        path('article_new/', views.article_new, name='article_new'),
        path('bilibili/', views.bilibili),
]

3. 使用render进行渲染。

def index_3(request,xx):
    return render(request,'music/index.html',{'booksname':xx})

render方法是django封装号的用来渲染模板的方法,方便好用。

总结

提示:这里对文章进行总结:

1、 URL概念
2、 url.py
3、 path规则
4、 include
5、 name
6、 模板路径
7、 render
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

发表回复

您的电子邮箱地址不会被公开。