{"id": "plugin_hooks:plugin-hook-jinja2-environment-from-request", "page": "plugin_hooks", "ref": "plugin-hook-jinja2-environment-from-request", "title": "jinja2_environment_from_request(datasette, request, env)", "content": "datasette - Datasette class \n \n A Datasette instance. \n \n \n \n request - Request object or None \n \n The current HTTP request, if one is available. \n \n \n \n env - Environment \n \n The Jinja2 environment that will be used to render the current page. \n \n \n \n This hook can be used to return a customized Jinja environment based on the incoming request. \n If you want to run a single Datasette instance that serves different content for different domains, you can do so like this: \n from datasette import hookimpl\nfrom jinja2 import ChoiceLoader, FileSystemLoader\n\n\n@hookimpl\ndef jinja2_environment_from_request(request, env):\n if request and request.host == \"www.niche-museums.com\":\n return env.overlay(\n loader=ChoiceLoader(\n [\n FileSystemLoader(\n \"/mnt/niche-museums/templates\"\n ),\n env.loader,\n ]\n ),\n enable_async=True,\n )\n return env \n This uses the Jinja overlay() method to create a new environment identical to the default environment except for having a different template loader, which first looks in the /mnt/niche-museums/templates directory before falling back on the default loader.", "breadcrumbs": "[\"Plugin hooks\"]", "references": "[{\"href\": \"https://jinja.palletsprojects.com/en/3.0.x/api/#jinja2.Environment\", \"label\": \"Jinja environment\"}, {\"href\": \"https://jinja.palletsprojects.com/en/3.0.x/api/#jinja2.Environment.overlay\", \"label\": \"overlay() method\"}]"}