自定义re_path转换器与path转换器

re_path转换:

需求:

实现一个获取文章列表的demo,用户可以根据/articles/文章分类/的方式来获取文章。其中文章分类采用的是分类1+分类2+分类3...的方式拼接的,并且如果只有一个分类,那就不需要加号。示例如下:

# 1. 第一种:获取python分类下的文章
/articles/python/
# 2. 第二种:获取python和django分类下的文章
/articles/python+django/
# 3. 第三种:获取python和django和flask分类下的文章
/articles/python+django+flask/
以此类推...

代码:## 标题

project:path_converter_demo
app : article
urls.py:
from django.urls import path,re_path
from . import views

urlpatterns = [
path(’’,views.article),

\w:0-9,a-z,A-Z \w+:表示一个或多个

#\w++\w+)+ 中间的“+”表示普通的加号
re_path(r’list/(?P\w+|(\w++\w+)+)/’,views.article_list)
]

views.py:
from django.shortcuts import reverse
from django.http import HttpResponse

def article(request):
return HttpResponse(“文章首页”)

def article_list(request,categories):
test = “图书的种类是:%s” % categories
return HttpResponse(test)

path转换## 标题

views.py
from django.shortcuts import reverse
from django.http import HttpResponse

def article(request):
return HttpResponse(“文章首页”)

def article_list(request,categories):
test = “图书的种类是:%s” % categories
return HttpResponse(test)
#这里使用了path的int转换
def article_detail(request,detail_id):
return HttpResponse(‘图书的ID是:%s’% detail_id)

urls.py:
from django.urls import path,re_path
from . import views

urlpatterns = [
path(’’,views.article),
re_path(r’list/(?P\w+|(\w++\w+)+)/’,views.article_list),
#使用int转换int:detail_id
path(‘detail/int:detail_id’,views.article_detail)
]

自定义路径转换器:

需求:
在“文章分类”参数传到视图函数之前要把这些分类分开来存储到列表中。
比如参数是python+django,那么传到视图函数的时候就要变成['python','django']
以后在使用reverse反转的时候,限制传递“文章分类”的参数应该是一个列表,并且要将这个列表变成python+django的形式。

project:path_converter_demo:
创建converter app:

为了能够调用这个转换器需要将它导入到__init__.py文件中:

init.py:

from . import converter

converter.py:

from django.urls import register_converter

class CategoriesConverter():
regex = r’\w+|(\w++\w+)+’

def to_python(self,values):
    #/python+django/ 转换成列表
    #['python','django']
    result = values.split('+')
    return result

def to_url(self,values):
    if isinstance(values,list):
        #将列表转换成/python+django/
        result = "+".join(values)
        return result
    else:
        raise RuntimeError("转换url的时候,分类参数必须为列表!")

#注册进转换器
register_converter(CategoriesConverter,‘cate’)

urls.py:

from django.urls import path,re_path
from . import views

urlpatterns = [
path(’’,views.article),
#re_path(r’list/(?P\w+|(\w++\w+)+)/’,views.article_list),
path(‘list/cate:categories/’,views.article_list,name=‘list’),
path(‘detail/int:detail_id/’,views.article_detail,name=‘detail’)
]

views.py:

from django.shortcuts import reverse
from django.http import HttpResponse

def article(request):
return HttpResponse(“文章首页”)

def article_list(request,categories):
print(categories)
print(reverse(‘list’,kwargs={‘categories’:categories}))
test = “图书的种类是:%s” % categories
return HttpResponse(test)

def article_detail(request,detail_id):
#reverse(‘detail’,kwargs={‘detail_id’:detail_id})

return HttpResponse('图书的ID是:%s'% detail_id)
在 WPF 中,可以使用绑定转换器将绑定值从数据源转换为 UI 元素,或将 UI 元素的值转换为数据源的值。如果你想要绑定 AduAttach:IconElement.PathData 属性,并且需要将绑定值转换为 PathGeometry 类型,可以按照以下步骤进行操作: 1. 创建一个继承自 IValueConverter 接口的转换器类,重写其中的 Convert 和 ConvertBack 方法。例如: ``` public class PathDataConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value is string pathDataString) { return Geometry.Parse(pathDataString); } return null; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { if (value is PathGeometry pathGeometry) { return pathGeometry.ToString(); } return null; } } ``` 其中,Convert 方法将 string 类型的路径数据转换为 PathGeometry 类型的几何图形,ConvertBack 方法将 PathGeometry 类型的几何图形转换为 string 类型的路径数据。 2. 在 XAML 中声明转换器并设置绑定。例如: ``` <Window.Resources> <local:PathDataConverter x:Key="pathDataConverter" /> </Window.Resources> <Path AduAttach:IconElement.PathData="{Binding PathDataString, Converter={StaticResource pathDataConverter}}" /> ``` 其中,local 是转换器类所在的命名空间,pathDataConverter 是转换器的标识符,PathDataString 是要绑定的属性。通过 Converter 属性将转换器设置为绑定的一部分。 这样,在绑定值从数据源转换为 UI 元素时,会调用 Convert 方法;在绑定值从 UI 元素转换为数据源时,会调用 ConvertBack 方法,将 PathGeometry 类型的几何图形转换为 string 类型的路径数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值