URL方法简介
- 功能:
返回一个绝对路径引用(不包含域名的URL);该引用匹配一个给定视图函数和一些可选参数
- 语法:
{% url 'urls.py的路由地址' value1 value2 %}
- 本质:URL与要为该URL调用的视图函数之间的映射表,以这种方式告诉Django,遇到哪个URL的时候,要对应执行哪个函数
url(r'^index/$', index, name='index')
r'^index/$'
- 正则表达式
- 也就是我们在浏览器中的地址栏中输入的网址,127.0.0.0:8000/index 。需要注意的是
- 如果网址唯一的话,后面需要加
/$
r'
可以不加,但推荐加上
index
- 视图函数
- 使用前需import进来
- 当浏览器中输入相应的url时,后台便会跳转到对应的视图函数中,执行相应程序。
name='index'
- 相当于该url在模板中的索引
- 在模板中一般通过
{% url 'index' %}
语句定位到对应的URL处。 - 后期更改url的地址时,不需要更改模板中的对应值。
- 例如:urls.py:
url(r'^bookinfo/(\d+)/$', polls_views.bookinfo, name='book')
html代码中:{% url 'book' 3 %};
拼接后返回地址为:bookinfo/3/
- 在Django中,url起着连接模板和视图函数的作用。举例如下:
from django.conf.urls import url
from django.contrib import admin
from message.views import index
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/$', index, name='index'),
]
- Django中的url操作流程一般为:点击网页上的链接,或提交表单时,通过`{% url ‘index’ %}跳转到对应的url网站。此时,后台执行相应的视图函数,完成相关操作。
URL解释
- 匹配规制
- 普通用法
urlpatterns = [url('^test/2018/$',views.TestOne.as_view())
- 正则写法
urlpatterns = [url('^test/[0-9]{4}/$',views.TestTwo.as_view())
- 若需传递参数,url中通过正则指定参数
url('^test/([0-9]{4})/$',views.TestThree.as_view()) class TestThree(View): def get(self,request,year): return HttpResponse('TestThree:带单个非命名写法') url('^test/([0-9]{4})/([0-9]{2})/([0-9]{2})/$',views.TestFour.as_view()) class TestFour(View): def get(self,request,year,month,day): return HttpResponse('TestFour:带多个非命名写法')
- 若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。
- 不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^test 而不是 ^/test;
- 普通用法
三种配置url的方法
- 函数
- 在my_app/views.py中,定义一个函数:
def login(request):
return render(request, 'test.html', {})
- 在urls.py中,配置:
from my_app import views
urlpatterns = [
url(r'^test/', views.login, name='test'),
]
- 类
- 在my_app/views.py中,定义一个类:
from django.views import View
class LoginView(View):
def get(self, request):
return render(request, 'test.html', {})
- 在urls.py中,配置:
from my_app.views import LoginView
urlpatterns = [
url(r'^login/', LoginView.as_view(), name='login'),
]
3.include
- 针对有多个app的情况,在该app下新建一个urls.py,从而将同一域名下的url放到一起,便于管理。
- 在my_app/views.py中,定义一个类:
from django.views import View
class LoginView(View):
def get(self, request):
return render(request, 'test.html', {})
- 在总的urls.py中
urlpatterns = [
url(r'^test/', include('my_app.url', namespace='test'),
]
- 在该app下的urls.py中,写法与第二种一样,只不过在模板中跳转到该连接时,url需要写成test:login形式