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

Django: Class-based views, URL and template_name

我正在尝试在基于 class 的视图中使用类似 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'),
]


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

除了template_name还有什么吗?

我读到在 URLS 中使用名称是一种很好的做法,因此万一 URL 本身发生变化,其余代码仍然有效,所以这就是我正在尝试的去做。

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

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

template_name = 'polls/detail.html'

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

template_name.html 文件的路径。

Url 的 name 参数,您可以使用 django.urls.reverse

从名称中反转 url