我有一個這樣的網址:
app_name = 'vineyards'
urlpatterns = [
path('<str:parent>/<str:region>/<slug:slug>/',
vineyard_detail, name="detail"),
]
這是模型中的絕對網址:
def get_absolute_url(self):
return reverse('vineyards:detail', kwargs={'parent': self.region.region_parent, 'region': self.region.slug, 'slug': self.slug})
該<str:parent>/是可選的,它可以為null。<str:parent>/如果它是 None我想忽略
例如,我希望 url 是這樣的: .../something/
而不是這個: .../None/something/
我怎樣才能做到這一點?是否可以?
uj5u.com熱心網友回復:
最簡單的解決方案是為您的 URL 模式添加第二條路徑:
app_name = '葡萄園'
urlpatterns = [
path('<str:parent>/<str:region>/<slug:slug>/',
vineyard_detail, name="detail"),
path('<str:region>/<slug:slug>/',
vineyard_detail, name="detail-without-parent"),
]
然后在get_absolute_url沒有定義父級時使用方法中的第二個路徑:
def get_absolute_url(self):
if self.region.region_parent is not None:
return reverse('vineyards:detail', kwargs={'parent': self.region.region_parent, 'region': self.region.slug, 'slug': self.slug})
else:
return reverse('vineyards:detail-without-parent', kwargs={'region': self.region.slug, 'slug': self.slug})
但是從您這里的情況來看,您似乎正在嘗試創建一些樹結構。也許考慮使用類似的東西django-mptt。
uj5u.com熱心網友回復:
有可能得到你需要的創建兩個模式(請注意順序)
urlpatterns = [
path('<str:region>/<slug:slug>/', vineyard_detail, name="detail_no_parent"),
path('<str:parent>/<str:region>/<slug:slug>/', vineyard_detail, name="detail"),
]
然后確保該parent值在視圖中是可選的(您可以設定默認值)
def vineyard_detail(request, slug, region, parent=None):
pass
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/318232.html
標籤:姜戈 网址 django-urls
下一篇:從大檔案中獲取URL串列
