我想在多個模板上呈現的視圖中有一些邏輯。
如何從另一個視圖中呼叫邏輯視圖并將資料傳遞回要呈現的視圖?
這是我正在做的一個簡單測驗。
def table_view(request):
today = now().date()
project_data = get_data_view
context = {'projects_data':project_data}
return render(request, "pages/project_table.html", context=context)
def get_data_view(request):
project_list = Project.objects.all()
context = {"project_list":project_list}
return {'context':context}
表視圖只是呈現一個表,但我想要的表中的資料 get_data_view
我知道我可以在同一個視圖中撰寫邏輯,但是我的一些視圖包含大量代碼并且不想重復相同的代碼來檢索相同的資料。
uj5u.com熱心網友回復:
視圖函式沒有什么特別的魔法——它們可以很自由地呼叫其他進行渲染的函式。因此,與其將 table_view 視為“視圖”函式,不如將其視為 get_data_view 函式的助手:
def table_view(request, context=None):
if context is None: context=dict()
today = now().date()
context.update({'some_other_data':'some value'})
return render(request, "pages/project_table.html", context=context)
def get_data_view(request):
project_list = Project.objects.all()
context = {"project_list":project_list}
return table_view(request, 'context':context)
或者我是否遺漏了您正在嘗試做的事情?
順便說一句,這就是我喜歡基于類的視圖的原因 - 您可以定義一個“TableView”類,然后將其子類化為您需要的所有實體到具有不同資料源的表(或者確實使用插件 django 包之一已經這樣做了:-))。
uj5u.com熱心網友回復:
您可以簡單地從邏輯視圖函式中呼叫 get_data_view 函式。get_data_view 將回傳您想要的資料,您可以像在 table_view 函式中所做的那樣渲染它。
您已經完成了大部分作業。你應該只修改代碼如下
def table_view(request):
today = now().date()
project_data = get_data_view()
context = {'projects_data':project_data}
return render(request, "pages/project_table.html", context=context)
def get_data_view():
project_list = Project.objects.all()
return project_list
根據您的方法,您的 get_data_view 回傳一個字典,其中值是 Project 物件。根據我對您的問題的理解,您只希望函式 get_data_view 回傳資料 project_list 以便您可以在多個模板上呈現它。這應該可以解決問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/400909.html
標籤:姜戈
上一篇:Django-在模板中顯示影像
