不知道如何实现这个MVC模式

时间:2015-03-09 13:55:56

标签: python django

我有一个JS模块(一堆接口代码)。我们称之为mymodule。它位于myapp/modules/mymodule。我希望将此模块与urls.pyviews.py保持联系。换句话说,我想以某种方式从我的根myapp/modules/mymodule/urls.py引用myapp/urls.py,而不是将我的根myapp/views.py与所有与mymodule相关联的处理程序填充。所以,这就是我现在尝试的:

## myapp/urls.py
from django.conf.urls import url
from myapp import views

urlpatters = [
    url(r'^$', views.index, name = 'index'),
    ... a lot of other urls
    ... and now I want to include urls associated with mymodule
    url(r'^mymodule/',include('myapp.modules.mymodule.urls'))
]

## myapp/modules/mymodule/urls.py
from myapp.modules.mymodule import handlers

urlpatters = [
    url(r'^dosomething/',handlers.dosomething)
]

## myapp/modules/mymodule/handlers.py
from django.http import HttpResponse

def dosomething(request):
    return HttpResponse("Hello world!")

我想要这个 - 当用户前往127.0.0.1:8000/myapp/mymodule/dosomething时,他或她应该看到“Hello world!”消息。

修改

我仍然会导致Page not found error的代码的更新版本如下所示:

## myapp/urls.py

from django.conf.urls import *
from myapp import views

urlpatterns = patterns('',
    url(r'^$',views.index, name='index'),
    ... a lot of other working urls
    url(r'^myapp/mymodule',include('myapp.modules.mymodule.urls')),
)


## myapp/modules/mymodule/urls.py

from django.conf.urls import *
from myapp.modules.mymodule import handlers

urlpatterns = patterns('',
    url(r'^dosomething/',handlers.dosomething),
)

## myapp/modules/mymodule/handlers.py

from django.http import HttpResponse

def dosomething(request):
    return HttpResponse("Hello world!")

修改 我的root urls.py文件现在看起来像这样:

## myapp/urls.py

from django.conf.urls import *
from myapp import views

urlpatterns = patterns('',
    url(r'^$',views.index, name='index'),
    ... a lot of other working urls
    url(r'^myapp/mymodule/',include('myapp.modules.mymodule.urls')),
)

所以,现在有一个结束斜杠,但问题是 - 当我转到127.0.0.1:8000/myapp/mymodule/dosomething时,Django调试器说Page not found并且它只尝试了^myapp/ ^myapp/mymodule/模式 - 所以我没有提到^dosomething/模式。但是,如果我现在转到127.0.0.1:8000/myapp/myapp/mymodule/dosomething,我现在在调试器页面中看到它尝试了^myapp/ ^myapp/mymodule/ /dosomething模式。它说/dosomething,因为我玩了mymodule / urls.py,现在它看起来像:

## myapp/modules/mymodule/urls.py

from django.conf.urls import *
from myapp.modules.mymodule import handlers

urlpatterns = patterns('',
    url(r'/dosomething',handlers.dosomething),
)

所以,我想所有这些麻烦的原因是我无法将所有这些模式结合起来使它们起作用。我需要清楚地了解我的网址格式应该如何在根urls.py内和myapp/urls.py

1 个答案:

答案 0 :(得分:1)

myapp前缀添加到url regex:

url(r'^myapp/mymodule/',include('myapp.modules.mymodule.urls'))

另请注意,urlpatters函数应创建from django.conf.urls import patterns urlpatterns = patterns('', ... )

urls.py

更新:抱歉,我没有注意到应用中的第一个urls.py。我把它与项目urls.py混淆了。我现在理解你应该有三个urlpatterns = patterns('', url(r'^myapp/',include('myapp.urls')), )

<强>项目/ urls.py

urlpatterns = patterns('',
    url(r'^mymodule/',include('myapp.modules.mymodule.urls')),
)

<强>的myapp / urls.py

urlpatterns = patterns('',
    url(r'dosomething/', handlers.dosomething),
)

<强>的myapp /模块/ MyModule的/ urls.py

{{1}}