我試圖在我的Django應用程式中建立功能,其中我們可以通過兩種方法來獲得資料:
我試圖在我的Django應用程式中建立功能。
由于這兩種方法都需要從資料集中獲取資料,我想知道是否有一種方法可以利用相同的ListView(不是CBV)來輸出資料。
urls.py
path('datalist/<slug:category_slug>/' views.problemlist, name="problem_list_category") 。
path('datalist/search/' views.problemlistbysearch, name="problem_list_search") 。
views.py
def problemlist(request, category_slug)。
qs = DataModel.objects.get(category_slug=category_slug)
return render(request,'list.html',{'qs':qs} )
def problemlistbysearch(request)。
if request.method == 'GET':
query = request.GET.get('name')
objlst = DataModel.objects.all()
qs = objlst.filter(title__icontains=query)
return render(request, 'search.html', {'qs':qs})
uj5u.com熱心網友回復:
基于函式的視圖(FBV)
你可以在urlpatterns中讓urls指向同一個視圖(problem_list):
urlpatterns = [
# ?,/span>
path('datalist/search/', views.problemlist, name='problem_list_search') 。
path('datalist/<slug:category_slug>/', views.problemlist, name='problem_list_category') 。
# ?。
]
然后在視圖中,我們尋找是否設定了category_slug,如果沒有,我們尋找?name=...查詢字串部分:
def problemlist(request, category_slug=None)。
if category_slug is not None:
qs = DataModel.objects.get(category_slug=category_slug)
else:
DataModel.objects.filter(title__icontains=request.GET.get('name'))
return render(request,'list.html', {'qs':qs})/code
基于類的視圖(CBV)
你也可以使用基于類的視圖,在這種情況下,你可以用:
定義一個ListView的子類。
from django.view.gener import ListView
class ProblemListView(ListView)。
model = DataModel
template_name = 'list.html'。
context_object_name = 'qs'def get_queryset(self)。
if 'category_slug' in self.kwargs:
return super().get_queryset().filter(
category_slug=self.kwargs['category_slug']
)
else:
return super().get_queryset().filter(
title__icontains=request.GET.get('name')
)
然后我們再次制作兩個路徑,將呼叫同一個視圖:
urlpatterns = [
# ?,/span>
path('datalist/search/'/span>, views.ProblemListView.as_view(), name='problem_list_search'/span>)。
path('datalist/<slug:category_slug>/', views.ProblemListView.as_view(), name='problem_list_category') 。
# ?。
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/324210.html
標籤:
