[英]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.