2016-03-31 28 views
0

私は2つのモデルを持っています - 一つはツール用、もう一つは部品用です。リストページは同じです。 URLに基​​づいてテンプレートに表示されているものをフィルタリングできますか?フィルタDjango Queryset URLパラメータに基づいて

ビュー(私はproduct_listにtool_listとpart_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}) 

URL

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'), 
] 
+0

あなたは、単一のビューのための2つの異なるURLをしたいですか? – v1k45

+0

はい、私は 'products/tools ...'と 'products/parts-supplies ...'を使いたいのですが、同じビューテンプレートを使用します。そして、「URL」に基づいて、クエリーセットはツールまたはパーツのいずれかになります。これを行うには、テンプレートの中に条件文を入れてURLをチェックする方法があります。 –

答えて

1

あなたの2つのビューtool_listpart_listはの正確な複製でありますお互い。単一のビューを作成し、複数のURLをそのビューにルーティングすることができます。あなたの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'), 
関連する問題