0

DetailView を使用しようとしています。私はそれについて深い理解を持っていません。

私がやろうとしているのは、pk からオブジェクトのプロパティを表示することです。つまり、たとえば /notendur/34 にいて、pk=34 のオブジェクトに関する情報を表示したいと考えています。

私はこれを理解しようとしています:

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

しかし、私はそれを理解することはできません。おそらく、あなたの一人が私が理解するのを手伝ってくれるでしょうか?最初のコードではなく、そのリンクの 2 番目のコード ブロックを見ています。

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

{% endblock %}

たとえば、HTML を使用して /notendur/34 から pk を取得しようとしています。

4

2 に答える 2

1

34詳細ビューは、コンテキスト内で名前が付けられた主キーを持つオブジェクトを自動的に渡しますobject。テンプレートでアクセスできます{{ object.pk }}{{ object.some_property_name }}

于 2014-06-06T14:30:12.947 に答える
1

まず、ビューで適切なクラスをロードする必要があります。

from django.views.generic import (
    DetailView,
)

Class Based View Inspector によると (このリンクを参照してください): 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 }}
于 2014-06-06T14:32:52.943 に答える