2014-10-11 122 views
0

我正在學習Django。我在我的應用程序中有兩個功能,一個用於cats,另一個用於dogs(作爲示例)。我有以下文件夾結構:如何從一個django views.py導入視圖到另一個

/myproject/templates <-- dogs.html, cats.html 
/myproject/dogs/ <-- views.py, models.py etc 
/myproject/cats/ <-- views.py, models.py etc 

現在無論catsdogs有共同的看法,等等,但目前我只是在各個views.py文件重複這些。有沒有辦法快速將視圖和定義從一個視圖「導入」另一個視圖?

這樣可以節省我剪切和粘貼很多工作。

這有什麼危險?例如。會出現衝突嗎?等

+0

你的問題很清楚,但你試圖解決的問題不是。如果你提供了你的項目更精確的細節,我們可以提供更有用的迴應 – skzryzg 2014-10-11 12:11:09

回答

0

肯定的是,你可以使用inheritance,你應該在這種情況下使用CBV

import Animal 

class Dog(Animal): 
    .... 
    pass 

class Cat(Animal): 
    .... 
    pass 

你必須改變你的urls.py以及

from django.conf.urls import url 
from dogs.views import Dog 
from cats.views import Cat 

urlpatterns = [ 
    url(r'^dog/', Dog.as_view()), 
    url(r'^dog/', Cat.as_view()), 
] 
+0

謝謝,如果我想要一個視圖繼承多個其他視圖的所有屬性呢? – alias51 2014-10-11 11:01:14

+0

你不能在Django中繼承FBV(基於功能的視圖)的另一個視圖 – Sasa 2014-10-11 11:05:30

+0

這裏是使用CBV的好解釋http://stackoverflow.com/questions/14788181/class-based-views-vs-function-based -views – Sasa 2014-10-11 11:06:24

0

最簡單的事情是有貓和狗的URL指向相同的視圖:

urlpatterns = patterns(
    'catsanddogs.views', 
    url(r'^(?P<kind>dog|cat)/(?P<id>\d+)$', 'details'), 
) 

然後在catsanddogs.views

def details(request, kind, id): 
    if kind == "dog": 
     ... whatever is specific to dogs ... 
    elif kind == "cat": 
     ... whatever is specific to cats ... 
    else: 
     raise ValueError("...") 

    ... whatever applies to both ... 
    return HttpResponse(...) 
相關問題