私はいくつかの ajax ページを含むサイトを持っています。ユーザーがブラウザ/login/
で入力すると、基本テンプレートから拡張された、完全にレンダリングされたテンプレートを取得する必要があります。しかし、ユーザーがログイン ボタンをクリックする$('#content').ajax('/login/');
と呼び出されるので、完全なテンプレートをレンダリングする必要はありません。
つまり、私はこれを持っています ( login_ajax.html
):
{% load i18n %}
{% block title %}
{% trans "Login" %}
{% endblock %}
{% block content %}
{% include "social.html" %}
{% endblock %}
でlogin.html
:
{% extends "base.html" %}
{% block ajax_content %}
{% include "login_ajax.html" %}
{% endblock %}
シンプルなログイン ビュー:
def login(request):
c = Context({'user': request.user})
if request.is_ajax():
return render_to_response('login_ajax.html', c, context_instance=RequestContext(request))
return render_to_response('login.html', c, context_instance=RequestContext(request))
この問題は、include タグのドキュメントに関連しています。
include タグは、「このサブテンプレートを解析し、親の一部であるかのようにそのコンテンツを含める」のではなく、「このサブテンプレートをレンダリングして HTML を含める」の実装と見なす必要があります。これは、インクルードされたテンプレート間で状態が共有されないことを意味します。各インクルードは完全に独立したレンダリング プロセスです。
title
しかし、ビューに名前を配置したり、login.html
andに 2 回配置したりしたくありませんlogin_ajax.html
。