繁体   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