我正在学习Django。我的应用中有2个功能,一个用于cats
,另一个用于dogs
(作为示例)。我有以下文件夹结构:
/myproject/templates <-- dogs.html, cats.html
/myproject/dogs/ <-- views.py, models.py etc
/myproject/cats/ <-- views.py, models.py etc
现在cats
和dogs
都有共享视图等,但目前我只是在每个views.py
文件中重复这些视图。有没有办法快速将视图和定义从一个视图“导入”到另一个视图?
这可以节省我切割和粘贴很多工作。
这有什么危险?例如。可能会发生冲突?等
答案 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(...)