2010-11-17 99 views
1

我想知道,這將有可能實現(作爲應用/中間件):重用django的可重複使用的應用程序

我安裝django的登記應用程序。然後,我創建了我的基於網站的應用程序,以製作一些通用的網頁瀏覽量我想在首頁上放置登錄表單和註冊表單。所以我進去修改/register/login.html和register/register.html模板以適應我的首頁設計(html東西)。然後我去我的主頁index.html文件,我去我的HTML我想要那些塊(登錄&註冊)去,我添加了{%load「register/login.html」%}和一個{%load「register/register.html」%}。現在,當urlconf調用我的索引視圖時,模板將到達LOAD觸發器,並將調用LOGIN視圖,以便將其所有form.elements傳遞給它,併爲其元素調用REGISTER視圖。然後,那些完成(呈現)視圖被傳遞給我的index.html並插入到放置LOAD語句的位置。

目前可以做到上述情況嗎?我的目標是讓各種應用程序可用,並將它們插入到我的項目中,而無需觸摸任何代碼(我想確保稍後可以升級各個應用程序,並且不會因爲我添加自定義內容而破壞項目中的任何內容......) 。

如果目前有上述可能,有人可以提供一些文檔/教程/ howtos重新使用其他人的應用程序的最佳做法?

+0

Django根本不擅長可重用性,使用第三方應用程序的定製,主要是通過分支和維護源代碼的獨立分支來完成。我最好建議你看看金字塔web框架如何處理應用程序的可擴展性http://docs.pylonshq.com/pyramid/dev/narr/extending.html – andreypopp 2010-11-17 10:33:40

+0

@andreypopp這是一個非常有趣的觀點。但是,首先,您是否考慮過抱怨那些第三方應用程序,而不是Django? – 2010-11-17 12:25:27

回答

0

確實有{% include %}標記,它允許您將模板直接包含在另一個模板中。它還獲取封閉模板獲取的所有內容,因此如果使用RequestContext,則意味着它可以訪問請求變量中的所有內容。

但是,它似乎是說你想以某種方式實際調用註冊視圖和登錄視圖並將結果嵌入到頁面中。這在理論上可以通過編寫一個自定義標籤來實現,該標籤使用http GET調用URL,然後從請求中輸出生成的HTML。

我不會推薦這個。相反,對於首頁,請繼續創建兩個指向django註冊應用程序中適當URL的表單。

0

如何簡單地修改應用程序中的視圖我重新使用包含一個額外的參數,以查看它是否被用作SUBVIEW(因此不會返回render_to_response()),並檢查「FORMNAME」中的請求.POST數據。然後,如果SUBVIEW(我正在重新使用的應用程序的視圖)在request.POST中找到它的「FORMNAME」,它將處理該表單。如果沒有提供request.POST數據,它將返回一個包含所有表單元素而不是render_to_response()的字典。然後,我可以在我的視圖中爲該頁面調用該函數,並將返回的值字典與其他任何組件一起傳遞給我的模板。在提交時,函數將被調用,並且如果它在request.POST數據中找到「表單名稱」(這個「表單名稱」可以在隱藏字段中,它將處理該表單,否則它將返回字典中的表單元素,下一個函數將在我的視圖中調用,它可能與django.contrib.django-registration.register()視圖有關,這會產生極端的重用性!還可以訪問到form.errors!

我的觀點:

def index(request): 
    login = django.contrib.register.login(request, ... , Subview=True) 
    register = django.contrib.register.register(request, ... , Subview=True) 

    return render_to_response('index.html', {'login_form': login, 'register_form': register}) 

我也可以叉每個應用程序,並修改它...它失敗的目的Ø將該應用程序作爲獨立維護的軟件包重新使用,而將其視爲更復雜的代碼粘貼。

相關問題