📅  最后修改于: 2023-12-03 14:54:03.393000             🧑  作者: Mango
在 Django 中,我们可以使用 URLConf 来定义 URL 和视图的映射关系。但是,有些情况下我们需要在 URL 中传递参数,比如查询字符串、路径参数等等。本文将介绍如何在 Django 模板中定义带有参数的 URL。
查询字符串是一种常见的 URL 参数传递方式,它通过在 URL 中添加 ?key=value
形式的参数来传递数据。在 Django 中,我们可以使用 urlencode
模板标签来生成查询字符串。
{% url 'view_name' param_name=param_value %}?{% urlencode {'query_param': query_value} %}
url
标签用于生成基础 URL,urlencode
标签用于生成查询字符串。urlencode
标签的参数是一个字典,它的键值对表示查询字符串中的参数和值。
路径参数是一种将参数编码到 URL 路径中的方式。在 Django 中,我们可以使用 path
路由匹配器来定义带有路径参数的 URL。在模板中,我们可以使用 url
标签来根据路由名称生成带有路径参数的 URL。
{% url 'view_name' param1=param1_value param2=param2_value %}
其中 param1
和 param2
是路由中定义的参数名,param1_value
和 param2_value
是对应参数的值。
在 Django 中,我们可以使用命名空间来组织视图和 URL。在模板中,我们可以使用命名空间和视图名称来生成带有命名空间的 URL。
{% url 'namespace:view_name' param1=param1_value %}
其中 namespace
是命名空间名称,view_name
是视图名称。
假设我们有一个视图 ProductListView
,它需要接受一个分类 ID 和一个关键字作为参数。我们可以在路由中定义以下 URL:
from django.urls import path
from .views import ProductListView
app_name = 'catalog'
urlpatterns = [
path('', ProductListView.as_view(), name='product_list'),
path('category/<int:category_id>/', ProductListView.as_view(), name='product_list_by_category'),
]
在模板中,我们可以使用以下标签生成 URL:
<!-- 生成 /catalog/ -->
<a href="{% url 'catalog:product_list' %}">All Products</a>
<!-- 生成 /catalog/category/1/ -->
<a href="{% url 'catalog:product_list_by_category' category_id=1 %}">Category 1</a>
<!-- 生成 /catalog/category/2/?query=search -->
<a href="{% url 'catalog:product_list_by_category' category_id=2 %}?{% urlencode {'query': 'search'} %}">Category 2</a>
本文介绍了在 Django 模板中定义带有参数的 URL 的三种方式:带有查询字符串的 URL、带有路径参数的 URL 和带有命名空间的 URL。这些技巧在开发 Web 应用时非常有用,希望对你有所帮助。