如何将视图从一个django views.py导入到另一个

时间:2014-10-11 10:45:49

标签: python django

我正在学习Django。我的应用中有2个功能,一个用于cats,另一个用于dogs(作为示例)。我有以下文件夹结构:

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

现在catsdogs都有共享视图等,但目前我只是在每个views.py文件中重复这些视图。有没有办法快速将视图和定义从一个视图“导入”到另一个视图?

这可以节省我切割和粘贴很多工作。

这有什么危险?例如。可能会发生冲突?等

2 个答案:

答案 0 :(得分:1)

当然,您可以使用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()),
]

答案 1 :(得分:0)

最简单的方法是让猫和狗的网址指向相同的视图:

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(...)