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

本文指导你快速入门Django,内容包括URL的基本概念、path和re_path的区别、模板路径配置,以及常用模板渲染方法。通过实例演示,掌握路由设置、参数解析和页面重定向技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习目标:

十天入门Django


学习内容:

<font color=## 系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、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//int:age/’,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)
  1. 在视图中将获取到的参数和参数的类型打印出来
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):

from django.contrib import admin
from django.urls import path,re_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),
   re_path('^hello/(?P<name>[a-z]{4,8})/(?P<age>[0-9]{1,3})/',views.test2)
]

5.include的作用

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

include例子:

项目目录下的主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')),
]

book&music/ulrs.py:

from django.urls import path
from . import views

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

]

book&music/views.py:

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:
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('这是新的网站首页')

在这里插入图片描述


三、模板路径配置

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('<h1>Hello Django!</h1>')

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/<xx>', 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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值