2014-10-11 59 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(...) 
相关问题