Есть ли способ иметь только одну функцию в представлениях, а затем поместить в нее множество категорий с одним путем в 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)
.