[英]Django use urls with same ending
我有一个带有应用程序web-api
和以下 url 配置的 django 项目:
主项目urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('web-api/', include('webapi.urls')),
]
应用程序web-api/urls.py
urlpatterns = [
path('<param1:param1>/summary', Param1Summary.as_view()),
path('<param1:param1>/item/<int:id>/summary', ItemView.as_view()),
]
/web-api/param1/summary
端点有效,但/web-api/param1/item/12121/summary
无效并返回 404 状态代码。
如果我将<param1:param1>/item/<int:id>/summary'
更改为<param1:param1>/item/<int:id>/whatever
,在web-api/url.py
我得到了所需的结果。
我尝试使用 url 正则表达式但没有成功。
关于如何解决问题的任何想法?
提前致谢!
不是一般的答案,但在我的情况下有效。
更改网址的顺序解决了这个问题。 web-api/urls.py
中的 url 必须按以下顺序排列:
urlpatterns = [
path('<str:param1>/item/<int:pk>/summary', ItemView.as_view()),
path('<str:param1>/summary', Param1Summary.as_view()),
]
我不确定,但您可以通过这种方式重新排序网址并添加名称空间,以便您可以从 html 模板或其他视图中调用它们:
urlpatterns = [
path('summary/<param1:param1>', Param1Summary.as_view(), name='summary_parm')
path('summary/<param1:param1>/item/<int:id>', ItemView.as_view(), name='summary_item'),
]
像这样更新您的应用程序 web-api 的urls.py
urlpatterns = [
path('<param1:param1>/item/<int:id>/summary', ItemView.as_view()),
path('<param1:param1>/summary', Param1Summary.as_view()),
]
只需交换它们的顺序,这就可以了。
首先,“param1”不是有效的 url 参数类型( 请参阅文档),因此您可能想使用'<str:param1>/summary'
和'<str:param1>/item/<int:pk>/summary'
.
其次,您应该将 url 变量命名为“pk”,如django 文档中所述,而不是“id”。
它查找 URLConf 中声明的 pk 和 slug 关键字 arguments,并从视图上提供的 model 属性或查询集属性向上查找 object
它应该如下所示:
urlpatterns = [
path('<str:param1>/summary', Param1Summary.as_view()),
path('<str:param1>/item/<int:pk>/summary', ItemView.as_view()),
]
或者,您可以在视图上设置pk_url_kwarg = "id"
以让get_object()
方法知道如何查询 object。 在文档中查看
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.