【问题标题】:Filter Django Queryset Based on URL Parameter根据 URL 参数过滤 Django 查询集
【发布时间】:2016-03-31 19:39:48
【问题描述】:

我有两种模型 - 一种用于工具,一种用于零件。列表页面将是相同的。我可以根据 URL 过滤模板中显示的内容吗?

视图 (我想将 tool_list 和 part_list 合并到 product_list 中)

def tool_list(request):
    tools = Tool.objects.all()
    parts = Part.objects.all()
    return render(request, 'tool_list.html', {'tools': tools, 'parts': parts})


def part_list(request):
    parts = Part.objects.all()
    tools = Tool.objects.all()
    return render(request, 'tool_list.html', {'parts': parts, 'tools': tools})


def product_detail(request, **kwargs):
    tool = get_object_or_404(Tool,  slug=kwargs.get('slug'))
    part = get_object_or_404(Part)
    return render(request, 'product_detail.html', {'tool': tool, 'part': part})

网址

urlpatterns = [
    url(r'^products/tools/$', tool_list, name='tool_list'),
    url(r'^products/parts-supplies/$', part_list, name='part_list'),
    url(r'^products/(?P<category>[^\.]+)/(?P<slug>[^\.]+)/$', product_detail, name='product_detail'),
]

【问题讨论】:

  • 你想要两个不同的 url 用于一个视图吗?
  • 是的,我想要 products/tools... 和 products/parts-supplies... 但使用相同的视图模板。而且,基于URL,查询集可以是工具或部件。现在我想起来了,唯一的方法可能是在我的模板中放入条件语句来检查 url。

标签: django django-models django-templates django-views


【解决方案1】:

您的两个视图,tool_list 和 part_list 是彼此的精确复制品。您可以创建一个视图并将多个 url 路由到它。像这样

def product_list(request):
    tools = Tool.objects.all()
    parts = Part.objects.all()
    return render(request, 'tool_list.html', {'tools': tools, 'parts': parts})

在您的网址中:

url(r'^products/tools/$', product_list, name='tool_list'),
url(r'^products/parts-supplies/$', product_list, name='part_list'),

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-01
    • 2013-06-11
    • 2017-10-30
    • 2022-07-19
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    相关资源
    最近更新 更多