假设我有以下文件夹结构:
mysite
- mysite
- views.py
- urls.py
- books
- views.py
- urls.py
- contact
- views.py
- urls.py
我想将 View 和 url 分开以使代码更易于处理。到目前为止,我只是将 View 捆绑到一个文件中,将 url 捆绑到另一个文件中,都在“mysite”文件夹中,但我觉得这是错误的做法。我首先尝试将 url“/contact”指向联系人文件夹中的 urls.py 文件,然后该 url 将指向/contact/views.py 文件中的 View (称为“联系人”)。
/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
No module named contact
请您参考如下方法:
您的 include 应该指向 urls.py 文件,而不是 View 。
另外,您不能在您的主 urlconf 中终止正则表达式(使用 $),否则将没有任何可匹配的内容。
url(r'^contact/', include('contact.urls')),
