【问题标题】:How to import views from one django views.py to another如何将视图从一个 django views.py 导入到另一个
【发布时间】:2014-12-06 11:18:42
【问题描述】:

我正在学习 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 文件中重复这些。有没有办法将视图和定义从一个视图快速“导入”到另一个视图?

这将节省我剪切和粘贴的大量工作。

这样做有什么危险?例如。会不会产生冲突?等等

【问题讨论】:

  • 您的问题很清楚,但您要解决的问题却不是。如果您提供更准确的项目详细信息,我们可以提供更有用的回复

标签: python django


【解决方案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()),
]

【讨论】:

  • 谢谢,如果我想让一个视图继承多个其他视图的所有属性怎么办?
  • 你不能在 Django 中使用 FBV(基于函数的视图)继承另一个视图
  • 这里很好地解释了为什么要使用 CBV stackoverflow.com/questions/14788181/…
【解决方案2】:

最简单的方法是让猫和狗的 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(...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-23
    • 2018-05-20
    • 2014-02-06
    • 1970-01-01
    • 2019-05-24
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多