render_to_response
render_to_response('index.html', locals(),context_instance=RequestContext(request))
パラメータの順序:(テンプレート名、辞書=なし、context_instance =なし)
Djangoのテンプレートシステムでは、二つのパッケージのクラステンプレートの変数がある、1 django.template.Contextが、これは最も一般的に使用され、我々は第二の方法のrender_to_response辞書パラメータを使用している場合、それはこのコンテキストになります渡しますその後、テンプレートを渡し、包装の種類、。
もう一つはdjango.template.RequestContext、Contextクラスであり、2つの違いとそれを比較しました。
第1の相違点は、その最初の引数としてのHttpRequestオブジェクトを渡す必要があり、RequestContextの可変時間を生成することです。
第二に、それは自動的にテンプレートに注入変数の数が増加します、TEMPLATE_CONTEXT_PROCESSORSにおける方法の設定によって返されたこれらの変数を宣言、メソッドTEMPLATE_CONTEXT_PROCESSORSはのHttpRequestオブジェクトを受け取り、そして最終的に辞書を返します。辞書の要素は内部自動的にテンプレートに注入変数RequestContextのとなります。例えばdjango.contrib.auth.context_processors.authは、ユーザー、メッセージ、パーマ変数を返します。
# in django/contrib/auth/context_processors.py
def auth(request):
""" ignore doc string """
def get_user():
....
return {
'user': SimpleLazyObject(get_user),
'messages': messages.get_messages(request),
'perms': lazy(lambda: PermWrapper(get_user()), PermWrapper)(),
}
時には、現在のドメインのすべてのローカル変数が辞書に割り当てられている辞書=地元()この操作を、使用
HttpResponseの違いへの対応
HttpResponse
# django/http/response.py # HttpResponse的初始化 class HttpResponseBase(six.Iterator): def __init__(self, content_type=None, status=None, reason=None, charset=None): class HttpResponse(HttpResponseBase): def __init__(self, content=b'', *args, **kwargs): super(HttpResponse, self).__init__(*args, **kwargs) # Content is a bytestring. See the `content` property methods. self.content = content
- HttpResponseオブジェクトはDjangoの、一般的に使用される機能図によって作成されます
- スーパー()メソッドは、一般的に、親クラスを呼び出すために使用されます。
python super(HttpResponse, self).__init__(*args, **kwargs)
HttpResponse親のそのコール__init__メソッドHttpResponseBase - したがって、のHttpResponse形式でのHttpResponse(コンテンツ=応答本体、CONTENT_TYPE =ボリュームデータタイプ、ステータス=ステータスコード応答)
- フロントエンドJSONデータ型、データ・ディクショナリを必要に応じて、データを手動でJSON形式にする必要があることに注意してください。HttpResponse(json.dumps(データ))
応答
# rest_framework/response.py # Response的初始化 class Response(SimpleTemplateResponse): def __init__(self, data=None, status=None, template_name=None, headers=None, exception=False, content_type=None):
- 応答オブジェクトのDjango RESTフレームワークは、オブジェクトフレームをカプセル化され
- レスポンスは自動的に手動変換せずに、データのJSONにデータを渡します。でも、直接レスポンス(データ= serializer.data)
- 一般APIViewを継承するためのフレームワークのビューDRF応答オブジェクトクラス、ビュークラスで使用されています
機能的なビューを使用することに応答して、@api_view装飾を追加する必要がある、など
from rest_framework.decorators import api_view @api_view(['GET', 'POST', ]) def articles(request, format=None): data= {'articles': Article.objects.all() } return Response(data, template_name='articles.html')
デコレータていない場合は、その後、文句を言うだろう:「Accepted_renderer応答に設定されていません。」