Есть ли способ иметь только одну функцию в представлениях, а затем поместить в нее множество категорий с одним путем в URL?

Предположим, что следующие коды предназначены для разных категорий и они должны иметь одинаковый html-файл:

def dsd(request):
    p=product.objects.filter(category__name='dsd')
    return render(request,'Tools.html',{'p':p})
def dad(request):
    p=product.objects.filter(category__name='dad')
    return render(request,'Tools.html',{'p':p})
def dfd(request):
    p=product.objects.filter(category__name='dfd')
    return render(request,'Tools.html',{'p':p})

def dadfd(request):
    p=product.objects.filter(category__name='dadfd')
    return render(request,'Tools.html',{'p':p})
def dasdfd(request):
    p=product.objects.filter(category__name='dasdfd')
    return render(request,'Tools.html',{'p':p})
def ss(request):
    p=product.objects.filter(category__name='ss')
    return render(request,'Tools.html',{'p':p})
def dasdfad(request):
    p=product.objects.filter(category__name='dasdfad')
    return render(request,'Tools.html',{'p':p})
def dfdfdfed(request):
    p=product.objects.filter(category__name='dfdfdfed')
    return render(request,'Tools.html',{'p':p})
def daaad(request):
    p=product.objects.filter(category__name='daaad')
    return render(request,'Tools.html',{'p':p})
def dddddd(request):
    p=product.objects.filter(category__name='dddddd')
    return render(request,'Tools.html',{'p':p}) 

html файл:

    <div class="grid">  
      
             {%for p in p%} 
                    <div class='card'>
                        <img src="{{p.image}}"></img>
                        <p id="id">{{p.description}}</p>
                        <a href="{{p.buy}}" target='_blank' rel='noopener noreferrer'>
                            <button><span class="price"> ${{p.price}}</span> buy</button>
                        </a>    




                    </div>

             {%endfor%} 
</div>

Если я перейду к своим URL и создам разные пути для каждой функции и создам отдельные html файлы с одинаковым кодом внутри них, то я запутаюсь.

Есть ли способ иметь только одну функцию в представлениях и затем поместить в нее множество категорий с одним путем в URL?

Вы можете просто добавить нужную категорию как часть url, что позволит вам использовать ее как переменную в представлении.

views.py

def tools(request, category):
    p = product.objects.filter(category__name=category)
    return render(request, 'Tools.html', {'p': p})

urls.py:

urlpatterns = [
    path('tools/<str:category>', tools, name='tools_by_category'),
]

затем, введя url: localhost:8000/tools/dddddd вы получите тот же результат, что и в вашей функции def dddddd(request).

Вернуться на верх