I am newbie on python django. when following Django Tutorial > Part04 > Generic View , i have trouble with using
Detail View. and actually its my first question on StackOverflow, so if i am wrong with something, please let me know. Thanks very much.
我想要什么?
- 我想
url(r'^(?P<question_id>\d+)/$', views.DetailView.as_view(), name="detail")优于url(r'^(?P<pk>\d+)/$', views.DetailView.as_view(), name="detail").因为它更具可读性和直观性。 - 所以我不想改变
polls/urls.py. - 我如何使用详细 View ,但仍保留
<CUSTOM_SLUG>在views.py
源代码
django_project/polls/urls.py (目前不工作)
urlpatterns = patterns('',
url(r'^$', views.IndexView.as_view(), name="index"),
url(r'^(?P<question_id>\d+)/$', views.DetailView.as_view(), name="detail"),
url(r'^(?P<question_id>\d+)/results/$', views.results, name="results"),
url(r'^(?P<question_id>\d+)/vote/$', views.vote, name="vote"),
)
django_project/polls/urls.py (工作来源,但我不想要这个。)
urlpatterns = patterns('',
url(r'^$', views.IndexView.as_view(), name="index"),
url(r'^(?P<pk>\d+)/$', views.DetailView.as_view(), name="detail"),
url(r'^(?P<question_id>\d+)/results/$', views.results, name="results"),
url(r'^(?P<question_id>\d+)/vote/$', views.vote, name="vote"),
)
django_project/polls/views.py
class DetailView(generic.DetailView):
model = Question
template_name = "polls/detail.html"
错误信息
通用详细 View DetailView 必须使用对象 pk 或 slug 调用。
请您参考如下方法:
https://docs.djangoproject.com/en/1.6/intro/tutorial04/
The DetailView generic view expects the primary key value captured from the URL to be called "pk", so we’ve changed poll_id to pk for the generic views.
所以这显然行不通:
url(r'^(?P<question_id>\d+)/$', views.DetailView.as_view(), name="detail"),
而这将起作用:
url(r'^(?P<pk>\d+)/$', views.DetailView.as_view(), name="detail"),
子类化 DetailView 以使用不同的正则表达式组名称:
https://github.com/django/django/blob/master/django/views/generic/detail.py
但是如果你将 DetailView 子类化,你可以告诉它什么是 pk 参数:
class MyCustomDetailView(DetailView):
pk_url_kwarg = 'object_id'
pk 是django中的标准术语;虽然这可能会使您的代码对您来说更具可读性, 其他对 django 感到满意的人可能认为 pk 更具可读性。如果您想自定义所有小细节,使用通用 View 有什么意义?
