#Django学习#URL方法

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的方法
  1. 函数
  • 在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形式

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值