在基于课程的观看之前,urls.py
看起来像这样:
urlpatterns= patterns('mypackage.views',
url(r'^$', 'home', name='home'),
url(r'other', name='other'),
)
现在我的家庭观点是基于班级的。由于我喜欢一致性,我不希望将视图类保持为字符串。我试过了:
urlpatterns= patterns('mypackage.views',
url(r'^$', 'Home.as_view', name='home'),
url(r'Other.as_view', name='other'),
)
我得到Parent module mypackage.views.Home does not exist
。如果我只是给出类名:
urlpatterns= patterns('mypackage.views',
url(r'^$', 'Home', name='home'),
url(r'Other', name='other'),
)
我得到:__init__ takes exactly 1 argument, 2 given
有没有办法将字符串作为第二个参数传递给CBV的url
函数和FBV而不是from mypackage.views import *
?
修改: 似乎没有内置的解决方案。在这种情况下:为什么字符串作为第二个参数允许使用url函数:它是否违反了zen(“只有一种方法可以执行此操作)?
答案 0 :(得分:2)
您应该导入基于类的视图并以这种方式指定它们:
from mypackage.views import *
urlpatterns = patterns('mypackage.views',
url(r'^$', Home.as_view(), name='home'),
url(r'other', Other.as_view() name='other'),
)
另请注意,您的url()
调用应该有三个参数:网址格式,视图和名称(您编写的某些示例并不包含所有这些参数)。
答案 1 :(得分:2)
如果您想将视图作为字符串传递,那么在您的视图中执行以下操作:
class Home(View):
pass
home = Home.as_view()
然后在你的网址中:
url(r'^$', 'mypackage.views.home', name='home'),
您需要使用完整路径。