簡體   English   中英

Django - 如何將多個參數傳遞給 URL

[英]Django - How to pass multiple parameters to URL

我創建了一個列表頁面,可以在其中搜索所有列表。 從那里,用戶可以單擊任何特定列表以查看更多詳細信息。 當我 go 到個人列表頁面時,我顯示面包屑以提供一個選項 go 返回搜索結果(這是以前的列表頁面)。

問題是我無法在從列表頁面調用單個列表頁面時傳遞 2 個參數(一個包含之前的 URL,以便我可以將其用於 Breadcrumb 返回搜索結果)。 請看主要代碼:

視圖.py

def listing(request, listing_id, query):
  listing = get_object_or_404(Listing, pk=listing_id)
  

  context = {
    'listing': listing,
    'query':query
  }

  return render(request, 'listings/listing.html', context)

HTML模板

{% url 'listing' listing_id=listing.id path=12 %}

我嘗試使用{{ request.get_full_path }}查找路徑然后添加到參數但它不起作用。 任何有關如何捕獲 URL 的建議將不勝感激。

在你的urls.py中試試這個:

urlpatterns = [
    path('listing/<int:pk>/<int:path>/', views.listing, name='listing')
]

您可以使用:

{% url 'listing' listing_id=listing.id path=request.get_full_path %}

但隨后路徑將不得不接受這一點。 所以它看起來像:

path('foo/<int:listing_id>/<path:path>/', …)

它看起來也很混亂,特別是因為它會百分比轉義各種問號和 & 號。

可能一個稍微干凈的解決方案是在查詢字符串中對此進行編碼,所以它看起來像:

path('foo/<int:listing_id>/', …)

視圖看起來像:

def listing(request, listing_id):
  listing = get_object_or_404(Listing, pk=listing_id)
  

  context = {
    'listing': listing,
    'query': request.GET.get('query')
  }

  return render(request, 'listings/listing.html', context)

我們將鏈接呈現到列表中:

{% url 'listing' listing_id=listing.id %}?query={{ request.get_full_path|urlencode }}

但是在 URL 中對整個路徑進行編碼看起來並不是很愉快。 如果你有一個搜索頁面,你也許可以簡單地對搜索查詢本身進行編碼(所以不是路徑,而是人們在搜索欄中寫的內容)。 這使得 URL 更短,視覺上更令人愉悅。

request.GET.getlist("get_full_path []", [])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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