django - Django将已知的确切字符串作为url参数传递
问题描述
我在调度程序中有两个 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': 'top'}),
正确的方法是什么?
解决方案
您误解了路径转换器的工作方式。第一个元素是类型,这里是str
,第二个是调用视图时使用的参数名称。此时,您不限制允许值本身。所以你的路径是:
path('posts/<str:ordering>/', posts, name='posts')
当您反转时,您将传入相关参数:
{% url 'posts' ordering='top' %}
如果你真的想确保人们只能传递这两个值,你可以在视图中以编程方式检查它,或者你可以re_path
在你的路径中使用正则表达式:
re_path(r'^posts/(?P<ordering>top|new)/$', posts, name='posts')
推荐阅读
- flutter - 在 Dart/Flutter 中使用 Google 表格
- angular - 错误 NG6001:无法在 NgModule 中声明“Highchar tsChartComponent”,因为它不是当前编译的一部分
- ios - ionic 4 如何使用 ios 退出应用程序,navigator.app.exitApp 不起作用
- python - 解析文本文件并格式化为 CSV
- python - 三重嵌套和 Numpy
- android - 无法在 Flutter 插件中重命名类
- azure-devops - 如何订阅 Azure Board 中的多个工作项?
- linux - 在 Linux 上构建 VS Code 时的问题
- php - PHP Symfony 4.4.5 错误:无法加载类型“Doctrine\DBAL\Types\DateType”:类未实现“Symfony\Component\Form\FormTypeInterface”
- python - 2D 变量的迭代分箱直方图