我在dispatcher中有两个URL指向同一个视图:
path('posts/top/', posts, name='top'),
path('posts/new/', posts, name='new'),
我希望视图开始如下:
def posts(request, ordering):
...
我想,要将top
和new
作为参数传递,应该是这样的:
path('posts/<ordering:top>/', posts, name='top'),
path('posts/<ordering:new>/', posts, name='new'),
但它给了我:
django.core.exceptions.ImproperlyConfigured: URL route 'posts/<ordering:top>/' uses invalid converter 'ordering'.
所以,作为一个工作,我使用这个,但它看起来有点脏:
path('posts/top/', posts, name='top', kwargs={'order': 'top'}),
path('posts/new/', posts, name='new', kwargs={'order': 'new'}),
做这件事的正确方法是什么?
2条答案
按热度按时间dba5bblo1#
您误解了路径转换器的工作方式。第一个元素是类型,这里是
str
,第二个是调用视图时使用的参数名。此时,您不约束允许的值本身。所以你的路径应该是:当你开始反转时,你会传入相关的参数:
如果你真的想确保人们只能传递这两个值,你可以在视图中以编程方式检查它,或者你可以使用
re_path
在你的路径中使用正则表达式:bzzcjhmw2#
下面是同样的错误:
django.core.exceptions.ImproperlyConfigured:URL route“test/id:id/”使用了无效的转换器“id”。
因为我使用
id
作为转换器,如下所示:所以,我使用
int
作为转换器,如下所示,然后错误就解决了:此外,
str
、int
、slug
、uuid
和path
转换器默认可用。