说我有以下文件夹结构:
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
没有名为联系人的模块
答案 0 :(得分:2)
您的include
应该指向urls.py文件,而不是视图。
另外,您不能在主urlconf中终止正则表达式(使用$),否则将无法匹配任何内容。
url(r'^contact/', include('contact.urls')),
答案 1 :(得分:0)
每个子文件夹中都需要一个__init__.py
文件才能导入。它不需要任何东西;它只需要在场。
答案 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),
)