Django |根据urlconfig中的url或路径生成随机url
关于根据Django url和路径生成示例url,我有一个问题 例如,如果我有两个URL,如:Django |根据urlconfig中的url或路径生成随机url,django,Django,关于根据Django url和路径生成示例url,我有一个问题 例如,如果我有两个URL,如: path('example/<int:example_id>/', views.some_view, name='example') url(r'^example/(?P<example_id>[0-9]+)/$', views.some_view, name='example') 随机的 基于具体名称+regex或converter参数的不同URL 换句话说,在源
path('example/<int:example_id>/', views.some_view, name='example')
url(r'^example/(?P<example_id>[0-9]+)/$', views.some_view, name='example')
随机的
基于具体名称+regex
或converter
参数的不同URL
换句话说,在源代码中,Django理解
是一个整数,依此类推。如果我有如下内容:1)我期望example/
2)我期望int
-我将能够使用它生成随机示例url
希望这是清楚的
这些URL只是一个例子。真正的URL会有所不同
多谢各位
换句话说,在源代码中,Django理解
是一个整数,依此类推
这实际上是在路径中寻找
模式。Django还有一组路径转换器。标准的是int
,str
,slug
,uuid
,path
,但您可以定义自己的路径转换器。实际上,Django文档中有一节解释了如何设计自己的路径转换器
路径的基本功能是构造正则表达式。因此,它会搜索像
这样的模式。由于您在此处使用了int
,因此使用了:
在这里,它将用(?[0-9]+)
替换
,其中将使用regex
部分
路径(…)
不仅构造正则表达式。它还通过调用.to_Python(…)
自动将捕获的项目映射到Python对象。因此,这意味着如果使用re_path(r'^example/(?P[0-9]+)/$,…)
,则example\u id
将是一个字符串,但对于path('example/,…)
,它将自动调用捕获的字符串上的int(…)
,从而传递int
对象。通常情况下,这没有多大区别
序列化对象时,这一点也适用:您可以传递一个值,它将调用对象上的。\u url(…)
,以将其转换为生成url的字符串表示形式。这意味着您可以编写自定义路径转换器,从而执行更复杂的转换
我期望example/
2)我期望int
-我将能够使用它生成随机的示例url
最终它归结为一个正则表达式。正则表达式可以转换为有限状态机,因此我们可以生成随机有效字符串。例如,它能够生成所有有效字符串(这通常是一个生成器,它将不断提出新字符串),或者生成与正则表达式匹配的随机字符串。但是,并不是说因为它与路径(…)匹配,所以它对视图来说是有意义的。例如,如果使用此
int
作为它正在获取的Post
对象的主键,那么对于随机URL,您可能会为不存在的Post
s生成URL。这可以简单地归结为将其替换为正则表达式:然后在捕获参数时,在字符串捕获上自动调用以_python
:至于生成随机URL,并不是说在这个示例\u id
后面存在一个对象,因此您最终生成的URL可以通过视图生成404。但是对于正则表达式,您可以生成随机字符串,特别是因为这最终归结为一个有限状态机。非常详细的解释。谢谢
example/234/
example/93/
example/228/
etc…
class IntConverter:
regex = '[0-9]+'
def to_python(self, value):
return int(value)
def to_url(self, value):
return str(value)