我有一个带有一些 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 标签应该被认为是“渲染这个子模板并包含 HTML”的实现,而不是“解析这个子模板并包含它的内容,就好像它是父模板的一部分一样”。这意味着包含的模板之间没有共享状态——每个包含都是一个完全独立的渲染过程。
但我不想将名称放在视图中,title
或者将其放置两次。login.html
login_ajax.html