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