Django url在基于类的视图中使用CreateView找不到模板

时间:2015-10-28 21:49:34

标签: python django

我创建了一个用户可以添加新项目的页面(本例中的注释),我正在使用我最近开始学习的CBV。

这是我的模特表格

class NoteForm(forms.ModelForm):
class Meta:
    model = Note
    fields = ('title', 'note', 'tags')

这是views.py

中的视图
class NoteCreate(CreateView):
    model = Note
    form_class = NoteForm
    template_name = "add_note.html"

然后这是我在app的urls.py中使用的url

from django.conf.urls import patterns, url
from . import views
from madNotes.views import  NoteCreate, NoteIndex, 

urlpatterns = patterns(
    '',
    url(r'^notes/add/$', NoteCreate.as_view(), name="new_note"),
    url(r'^$', NoteIndex.as_view()),
    url(r'^(?P<slug>\S+)/$', views.NoteDetail.as_view(), name="entry_detail"),

 )

注意:我在项目urls.py文件中使用了与127.0.0.1:8000主页面相同的URL,但是它有效。

我已经看过几个教程甚至docs,但似乎无法找到我做错的事情。我是否还需要添加一个函数才能将其保存在数据库中,否则CBV会完成所有工作?

编辑:我得到的错误就是这个

  

找不到页面(404)   请求方法:GET   请求网址:http://127.0.0.1:8000/notes/add/

这是项目的urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin
from MadNotez import settings
from registration.backends.default.views import RegistrationView
from madNotes.forms import ExRegistrationForm
if settings.DEBUG:
    import debug_toolbar
urlpatterns = patterns('',
    url(r'^__debug__/', include(debug_toolbar.urls)),
    url(r'accounts/register/$', RegistrationView.as_view(form_class = ExRegistrationForm), name='registration_register'),
    url(r'^accounts/', include('registration.backends.simple.urls')),
    url(r'^admin/', include(admin.site.urls)),
    url('^markdown/', include('django_markdown.urls')),
    url('^notes/', include('madNotes.urls')),
    #url(r'^$', views.NoteCreate.as_view(), name="new note"), when I used it here it worked
)

1 个答案:

答案 0 :(得分:1)

你说那是urls.py的{​​{1}},这意味着它包含在项目的app中。

正如您现在所示,所有应用的URI均位于urls.py前缀

notes

因此目前的情况是页面的正确URI是

url('^notes/', include('madNotes.urls')),

为了清理一下,我建议将应用的http://127.0.0.1:8000/notes/notes/add/ 修改为

urls.py

以便可以通过

访问该页面
url(r'^add/$', NoteCreate.as_view(), name="new_note"),

这样,所有应用的网页/服务都以http://127.0.0.1:8000/notes/add/ 前缀提供,并且名称与其操作一致(即notesadd等)