📜  带有参数的 django 模板 url - 汇编(1)

📅  最后修改于: 2023-12-03 14:54:03.393000             🧑  作者: Mango

带有参数的 Django 模板 URL

在 Django 中,我们可以使用 URLConf 来定义 URL 和视图的映射关系。但是,有些情况下我们需要在 URL 中传递参数,比如查询字符串、路径参数等等。本文将介绍如何在 Django 模板中定义带有参数的 URL。

带有查询字符串的 URL

查询字符串是一种常见的 URL 参数传递方式,它通过在 URL 中添加 ?key=value 形式的参数来传递数据。在 Django 中,我们可以使用 urlencode 模板标签来生成查询字符串。

{% url 'view_name' param_name=param_value %}?{% urlencode {'query_param': query_value} %}

url 标签用于生成基础 URL,urlencode 标签用于生成查询字符串。urlencode 标签的参数是一个字典,它的键值对表示查询字符串中的参数和值。

带有路径参数的 URL

路径参数是一种将参数编码到 URL 路径中的方式。在 Django 中,我们可以使用 path 路由匹配器来定义带有路径参数的 URL。在模板中,我们可以使用 url 标签来根据路由名称生成带有路径参数的 URL。

{% url 'view_name' param1=param1_value param2=param2_value %}

其中 param1param2 是路由中定义的参数名,param1_valueparam2_value 是对应参数的值。

带有命名空间的 URL

在 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 应用时非常有用,希望对你有所帮助。