我是python django的新手。在关注Django Tutorial > Part04 > Generic View时,我无法使用
Detail View
。实际上它是我在StackOverflow上的第一个问题,所以如果我错了什么,请告诉我。非常感谢。
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
。<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"
通用详细信息视图必须使用对象pk或slug调用DetailView。
答案 0 :(得分:2)
https://docs.djangoproject.com/en/1.6/intro/tutorial04/
DetailView通用视图需要调用从URL捕获的主键值&#34; pk&#34;,因此我们已将poll_id更改为pk以获取通用视图。
所以这显然不起作用:
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
更具可读性。如果要自定义所有小细节,使用generic
视图有什么意义?