Django |根据urlconfig中的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 换句话说,在源

关于根据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

换句话说,在源代码中,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)