我正在尝试使用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。
答案 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 }}