zoukankan      html  css  js  c++  java
  • 自制URL转换器

    自定义 url 转换器五个步骤:

    1. 定义一个类。
    2. 在类中定义一个属性  regex  ,这个属性是用来保存 url 转换器规则的正则表达式。
    3. 实现  to_python(self,value)  方法,将 url 中的值转换一下,然后传给视图函数的。
    4. 实现  to_url(self,value)  方法,做 url 反转的时候,将传进来的参数转换后拼接成一个正确的url
    5. 将定义好的转换器,注册到django中。
    6. 例子:获取列表分类(/article/list/python+django+flask)
       1 #在应用下新建converter.py文件
       2 from django.urls import converters,register_converter
       3 
       4 class CategoryConverter():
       5     regex = r'w+|(w++w+)+'
       6 
       7     def to_python(self,value):
       8         #python+django+flask
       9         #['python','django','flask']
      10         result = value.split("+")
      11         return result
      12 
      13     def to_url(self,value):
      14         #value:['python','django','flask']
      15         #python+django+flask
      16         if isinstance(value,list):
      17             reslut = '+'.join(value)
      18             return reslut
      19         else:
      20             raise RuntimeError('转换url的时候,分类参数必须为列表')
      21 
      22 register_converter(CategoryConverter,'cate')
       1 #应用的urls.py
       2 from django.urls import path,re_path
       3 from . import views
       4 
       5 urlpatterns = [
       6     path('',views.article),
       7     #w: 0-9 a-z A-Z
       8     #re_path(r'list/(?P<categories>w+|(w+ +w+)+)/',views.article_list)
       9     path('list/<cate:categories>/',views.article_list,name='list'),
      10     path('detail/<int:article_id>/',views.article_detail,name='detail')
      11 ]
       1 #应用的views.py
       2 from django.http import HttpResponse
       3 from django.shortcuts import reverse,redirect
       4 
       5 def article(request):
       6     return HttpResponse('文章首页')
       7 
       8 #定义文章列表函数,参数:分类
       9 def article_list(request,categories):
      10     text = '您填写的分类是:%s' % categories
      11     return HttpResponse(text)
      12 
      13 def article_detail(request,article_id):
      14     reverse('detail',kwargs={'article_id':article_id})
      15     return HttpResponse('文章详情')
      1 #应用的__init__.py文件
      2 from . import converters
      1 #项目的urls.py文件
      2 from django.urls import path,include
      3 
      4 urlpatterns = [
      5     path('',include('article.urls')),
      6     path('article/',include('article.urls'))
      7 ]

    7. 一个匹配四个数字年份的 url 转换器。示例代码如下:

       1 # 定义一个类
       2 class FourDigitYearConverter:
       3     regex = '[0-9]{4}'
       4     
       5     def to_python(self, value):
       6         return int(value)
       7 
       8     def to_url(self, value):
       9         return '%04d' % value
      10 
      11 # 注册到django中
      12 from django.urls import register_converter
      13 register_converter(converters.FourDigitYearConverter, 'yyyy')
      14 urlpatterns = [
      15     path('articles/2003/', views.special_case_2003),
      16     # 使用注册的转换器
      17     path('articles/<yyyy:year>/', views.year_archive),
      18 ...
      19 ]



  • 相关阅读:
    Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. ......
    UVA 1597 Searching the Web
    UVA 1596 Bug Hunt
    UVA 230 Borrowers
    UVA 221 Urban Elevations
    UVA 814 The Letter Carrier's Rounds
    UVA 207 PGA Tour Prize Money
    UVA 1592 Database
    UVA 540 Team Queue
    UVA 12096 The SetStack Computer
  • 原文地址:https://www.cnblogs.com/liqiongming/p/10296530.html
Copyright © 2011-2022 走看看