Django:基于类的视图,URL和template_name

时间:2017-11-01 00:23:05

标签: python django django-class-based-views

我尝试在基于类的视图中使用类似polls:detail的内容,例如:

class QuestionDetail(DetailView):
    template_name = 'polls:result'

但是,我收到了TemplateDoesNotExist at /polls/2/result polls:result错误...

urls.py是:

from django.conf.urls import url
from polls.views import IndexView, DetailView, ResultsView

from . import views


app_name = 'polls'
urlpatterns = [
    url(r'^$', IndexView.as_view(), name='index'),
    url(r'^(?P<pk>\d+)/$', DetailView.as_view(), name='detail'),
    url(r'^(?P<pk>\d+)/result$', ResultsView.as_view(), name='result'),
    url(r'^(?P<pk>\d+)/vote$', views.vote, name='vote'),
]


我想主要的问题是,如何在基于类的视图中使用URL的名称,而不是显式提供模板名称,例如polls/question_results.html

除了template_name还有其他什么吗?

我正在阅读在URL中使用名称是一个好习惯,所以如果URL本身发生变化,其余的代码仍然有效,这就是我正在尝试做的事情。

2 个答案:

答案 0 :(得分:1)

您可以使用以下URL的名称: django.urls.reverse('polls:detail',args = [object.id])

您还必须更改template_name设置,并在当前模板文件夹中创建模板detail.html。

template_name ='polls / detail.html'

答案 1 :(得分:1)

网址名称和模板名称是非常绝对的东西。

template_name.html文件的路径。

您可以使用name <{1}}参数来使用django.urls.reverse

从名称中撤消网址