django - 如何使用使用多个参数的 url-pattern 在 django 中创建唯一的 url?
问题描述
我的网址是这样构成的:
example.com/category/subcategory/name
现在我正在使用 DetailView 并在我编写它时检测到 url 但它会积极解析为包含正确名称的任何地址,因为该名称是唯一的,所以我需要检查的是该名称是否对应于子类别并且这个子类别对应于主要类别。
例如我想要的网址是:
http://example.com/animal/cat/garfield
它可以用 200 代码解决。但是,当我写:
http://example.com/insect/cat/garfield
它也解析为 200 而不是 404。
如何在我的视图中检查这些参数?
我的网址.py
path('<str:category>/<str:subcategory>/<str:slug>', views.AnimalDetailView.as_view(), name="animal_detail")
我的观点:
class AnimalDetailView(DetailView):
model = Animal
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['now'] = timezone.now()
return context
解决方案
我认为您的 URL 应该以/
. 参考https://docs.djangoproject.com/en/2.1/topics/http/urls/
path('<str:category>/<str:subcategory>/<str:slug>/', views.AnimalDetailView.as_view(), name="animal_detail").
通过 URL 传递的所有参数都将使用 kwargs 获取。如果您想在视图中访问参数,可以使用以下方法 1)
class Test(DetailView):
def get(self, request, **kwargs):
subcategory = kwargs['subcategory']
category = kwargs['category']
2)
class Test(DetailView):
def get(self, request, category, subcategory, .. ):
# category contains value of category
第一种方法是首选方法。
推荐阅读
- jenkins - 如何将现有项目从 CVS 签出到 Jenkins
- firebase - 这条规则有多安全?
- html - 单击按钮时如何显示表格?
- javascript - 用 HTML 输入值替换部分 JSON 对象
- julia - 如何从常规矩阵继承
- networking - lxc-start:控制器:lxccontainer.c:wait_on_daemonized_start:842 收到容器状态“STOPPING”而不是“RUNNING”
- python - 从没有空格的字符串中提取多个日期的简单方法?
- python - 创建作为对象存储在单列中的列表列表
- javascript - VueJS值更改不调用@change
- sql - 如何按性别选择 first_name ,最高工资组?