不从urls.patterns调用视图函数

时间:2015-04-01 19:13:44

标签: django django-views django-urls

我的视图功能不是由urls.py模式调用的。我只能明确地打电话给他们。

基本布局

--project
----persons
----project

project/urls.py是:

from django.conf.urls import url, include, patterns
from .views import page   #irrelevant
# from persons import views as person_views

urlpatterns = patterns('',
    url(r'^(?P<slug>[\w./-]+)/$', page, name='page'), #irrelevant
    url(r'^$', page, name='homepage'),                #irrelevant
    url(r'^persons/', include('persons.urls', namespace='persons')),  # WORKS
#   url(r'^persons/$', person_views.persons, name='persons'),   #wont work
#   url(r'^persons/add/$', person_views.add_person, name='add_person'),  #wont work
)

直到这一刻,一切都还可以,因为成功包含了men.urls ......但是在里面:

persons/urls.py

from django.conf.urls import patterns, url
#from persons.views import index_persons, add_person
from persons import views

#views.index_persons('GET / HTTP/1.0')  # >>> WORKS - function called <<< !!!

urlpatterns = patterns('',
    url(r'.', views.index_persons, name='index_persons'), # DOES NOT WORK
    url(r'^add/', views.add_person, name='add_person'),   # DOES NOT WORK
)

我也尝试了其他正则表达式:

    url(r'*', views.index_persons, name='index_persons'), # DOES NOT WORK
    url(r'^$', views.index_persons, name='index_persons'), # DOES NOT WORK

没有运气......

我的persons/views.py文件包含:

def index_persons(request):
    print 'WHY???'

def add_person(request):
    print 'WHY???'

&#39; WHY ???&#39;通常在控制台中打印(stdout - 因为我从manage.py runserver执行),当来自persons / urls.py的 index_persons函数被显式调用

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

project/urls.py中,将page网址格式移到其他网格下方。否则,/persons/的请求将首先与page网址格式匹配。

url(r'^$', page, name='homepage'),
url(r'^persons/', include('persons.urls', namespace='persons')),
url(r'^(?P<slug>[\w./-]+)/$', page, name='page'),

persons/urls.py内,您应该:

urlpatterns = patterns('',
    url(r'^$', views.index_persons, name='index_persons'),
    url(r'^add/$', views.add_person, name='add_person'),
)

答案 1 :(得分:1)

您的网址规则应为

url(r'^/?$, views.index_persons, name='index_persons'), 

注意1 :不要忘记重新启动服务器。

注意2 namespace='persons'等于未设置namespace,因为url persons/是相同的。