2016-07-11 4 views
0

私はDjangoを学ぼうとしています。私は基本的な機能を理解するために小さなアプリケーションを作成しています。 django appのviews.pyでは、チュートリアルのいくつかはテンプレートからのrender()を使用し、他のチュートリアルはdjangoショートカットモジュールのrender()を使用します。例えばdjango.shortcutsモジュールにあるDjangoTemplatesクラスとrender()メソッドのrender()の違いは何ですか?

、views.py

from django.shortcuts import render 
def home(request): 
    context = {} 
    template = "app/add_item.html" 
    return render(request, template,context) 

、まだ他に、

from django.http.response import HttpResponse 
from app.models import Items # this is the model 
def home(request): 
    item_list = Items.objects.order_by('-item_name') 
    template = loader.get_template('app/add_item.html') # could be index.html as well 
    context = { 
     'item_list': item_list, 
    } 
    return HttpResponse(template.render(context, request)) 

DjangoTemplatesクラスの()メソッドをレンダリングとDjangoに見られる()メソッドをレンダリングするの違いは何です。ショートカットモジュール?どちらを選ぶべきですか?

答えて

2

django.shortcuts.renderは、その名前が示すように、レンダリングされたテンプレートをビューからの応答として返すためのショートカットです。その使用はむしろその文脈に限定されている。それは、最初の引数としてHttpRequestインスタンスを受け取り、

が所与のコンテキスト辞書で与えられたテンプレートを組み合わせて、そのレンダリングされたテキストをHttpResponseオブジェクトを返すために、その主な目的は、ドキュメントごとに、です。

重要なことに、これは名前でテンプレートを選択します。 を選択して、応答としてレンダリングおよび返すためのテンプレートを作成します。

Template.renderは、低レベルのテンプレートAPIの一部であり、そのオブジェクトが表す単一のテンプレートを取り、それを文字列にレンダリングします。

重要なことに、これはオブジェクトで既に表現されているテンプレートだけです。レンダリングする別のテンプレートを検出するメカニズムはありません。


通常、ビューからの応答としてレンダリングされたテンプレートを返すことが多いので、ショートカットバージョンが最も便利です。これが存在する理由のすべてです。

+0

ありがとうございます。しかし、 "それはレンダリングするために別のテンプレートを発見する仕組みがない"。 '' django.shortcuts.render'''の場合でも、htmlテンプレートを明示的に指定します。ではない? – hAcKnRoCk

+0

混乱して申し訳ありません。レンダリング関数( 'django.shortcuts.render')では、レンダリングするテンプレートを示す引数が必要です。 'Template.render'は1つのテンプレートだけをレンダリングします。他のものをレンダリングするために渡すことができる引数はありません。もっと理にかなっている? –

関連する問題