Django中的多个URL /视图

时间:2014-09-30 15:08:25

标签: python django

说我有以下文件夹结构:

mysite
   - mysite
       - views.py
       - urls.py
   - books
       - views.py
       - urls.py
   - contact
       - views.py
       - urls.py

我希望将视图和网址分开,以使代码更易于处理。直到这一点,我刚刚将视图捆绑到一个文件中,并且在#34; mysite"文件夹,但我觉得这是错误的事情。我开始尝试指出网址" / contact"到联系人文件夹中的urls.py文件,然后该URL将指向/contact/views.py文件中的视图(名为" contact")。

/mysite/urls.py

from django.conf.urls import include, patterns, url
from mysite import views
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^contact/$', include('contact.views.contact')),
)

/contact/urls.py

from django.conf.urls import include, patterns, url
from mysite import views
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^contact/$', views.contact),
)

/contact/views.py

from django.core.mail import send_mail
from django.http import HttpResponseRedirect
from django.shortcuts import render

def contact(request):
    errors = []
    if request.method == 'POST':
        if not request.POST.get('subject', ''):
            errors.append('Enter a subject.')
        if not request.POST.get('message', ''):
            errors.append('Enter a message.')
        if request.POST.get('email') and '@' not in request.POST['email']:
            errors.append('Enter a valid e-mail address.')
        if not errors:
            send_mail(
                request.POST['subject'],
                request.POST['message'],
                request.POST.get('email', 'noreply@example.com'),
                ['siteowner@example.com'],
            )
            return HttpResponseRedirect('/contact/thanks/')
    return render(request, 'contact_form.html',
        {'errors': errors})

这给了我错误

  

ImportError at / contact
  没有名为联系人的模块

3 个答案:

答案 0 :(得分:2)

您的include应该指向urls.py文件,而不是视图。

另外,您不能在主urlconf中终止正则表达式(使用$),否则将无法匹配任何内容。

url(r'^contact/', include('contact.urls')),

答案 1 :(得分:0)

每个子文件夹中都需要一个__init__.py文件才能导入。它不需要任何东西;它只需要在场。

Package documentation

答案 2 :(得分:0)

在@Daniel Roseman的帮助下,指向/联系到联系人文件夹中的urls.py文件工作正常。

然后我最终匹配" / contact / contact"因为第二个urls.py文件只需匹配其根目录:

<强> /mysite/urls.py

url(r'^contact/', include('contact.urls')),

<强> /contact/urls.py

urlpatterns = patterns('',
    url(r'^$', views.contact),
)