Max*_*ore 0 django django-urls
我在调度员中有两个网址指向相同的视图
path('posts/top/', posts, name='top'),
path('posts/new/', posts, name='new'),
Run Code Online (Sandbox Code Playgroud)
我希望查看开始如下:
def posts(request, ordering):
...
Run Code Online (Sandbox Code Playgroud)
我想,传递top和new作为参数应该是这样的:
path('posts/<ordering:top>/', posts, name='top'),
path('posts/<ordering:new>/', posts, name='new'),
Run Code Online (Sandbox Code Playgroud)
但它给了我:
django.core.exceptions.ImproperlyConfigured: URL route 'posts/<ordering:top>/' uses invalid converter 'ordering'.
Run Code Online (Sandbox Code Playgroud)
所以,作为一个解决方法我使用它,但它看起来有点脏:
path('posts/top/', posts, name='top', kwargs={'order': 'top'}),
path('posts/new/', posts, name='new', kwargs={'order': 'top'}),
Run Code Online (Sandbox Code Playgroud)
做正确的方法是什么?
Dan*_*man 10
你误解了路径转换器的工作方式.第一个元素是类型,这是str,第二个是调用视图时使用的参数名称.此时,您不会限制允许值本身.所以你的道路将是:
path('posts/<str:ordering>/', posts, name='posts')
Run Code Online (Sandbox Code Playgroud)
当你来反转时,你会传递相关的参数:
{% url 'posts' ordering='top' %}
Run Code Online (Sandbox Code Playgroud)
如果您确实希望确保人们只能传递这两个值,您可以在视图中以编程方式检查它,也可以re_path在路径中使用正则表达式:
re_path(r'^posts/(?P<ordering>top|new)/$', posts, name='posts')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
777 次 |
| 最近记录: |