簡體   English   中英

Django 使用相同結尾的網址

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM