Django Detailview显示父级的属性

时间:2014-06-06 14:19:56

标签: python django detailview

我正在尝试使用DetailView。我对它没有深刻的理解。

我要做的是从pk显示对象的属性。也就是说,我在/ notendur / 34,我想用pk = 34显示有关对象的信息。

我正试图理解这一点:

https://docs.djangoproject.com/en/dev/intro/tutorial04/

但我无法理解它。也许你们中的一个可以帮助我理解?我正在查看该链接中的第二个代码块,而不是第一个代码块。

{% extends "index.html" %}
{% block content %}
{{ "placeholder" }}
{% endfor %}

{% endblock %}

我希望使用HTML从/ notendur / 34中获取pk。

2 个答案:

答案 0 :(得分:1)

详细信息视图会在上下文中自动传递名为34的主键object的对象。你可以在模板中访问它,例如{{ object.pk }}{{ object.some_property_name }}

答案 1 :(得分:1)

首先,您需要加载相应的类:

from django.views.generic import (
    DetailView,
)

根据基于类的视图检查器(在此链接上保留一个参考号): http://ccbv.co.uk/

DetailView具有以下属性:

content_type = None
context_object_name = None
http_method_names = [u'get', u'post', u'put', u'patch', u'delete', u'head', u'options', u'trace']   View
model = None
pk_url_kwarg = 'pk'
queryset = None
response_class = <class 'django.template.response.TemplateResponse'>
slug_field = 'slug'
slug_url_kwarg = 'slug'
template_name = None
template_name_field = None
template_name_suffix = '_detail'

从上面可以看出,当调用DetailView时,它将首先检查请求中是否存在pk或slug参数, 这是在你的urls.py文件中完成的:

urlpatterns = patterns('',
    ...
    url(r'^view/(?P<slug>[\d]+)/$', MyTestDetailView.as_view(), name='myurl-name'),
    ...
)

通过在url中定义slug参数,DetailView知道您请求详细信息的项目(替代您可以使用pk,但是slug会生成更友好的URL)。 然后,它将基于slug或pk字段获取模型或查询集(在视图中定义),这是在def get_object(self,queryset = None)方法中执行的。 抓取模型后(如果失败则会引发404错误)您可以使用模板中的对象(在template_name属性下指定):

{{ object }}

如果要更改模板变量的名称,可以指定context_object_name属性。一个简单的例子如下:

from django.views.generic import (
    DetailView,
)

from myapp.models import (
    MyModel,
)

class MyTestDetailView(DetailView):
    """
    Set context object name to mytemplatevar
    """
    context_object_name = "mytemplatevar"
    """
    Define the model to use
    """
    model = MyModel
    """
    Define the template
    """
    template_name = "myapp/detail_view.html"

来自您不需要任何其他内容的公寓,您可以在模板中访问您的对象:

{{ mytemplatevar.something }}