Django - 在所有模板文件中为 ajax 请求设置值
Django - Set value for ajax request in all template files
我有一个网站使用 ajax 内容加载来加载页面内容。对于所有页面,我检查是否为 ajax 的请求:
if request.is_ajax():
return render(request, 'home.html', {'posts': posts,
'base_theme': 'ajax_base.html',
})
else:
return render(request, 'home.html', {'posts': posts,
'base_theme': 'base.html'
})
我必须在所有操作中设置 base_theme,我必须在模板中再次设置:
{% extends base_theme %}
我如何在自动检查请求并为其设置值的地方设置请求的全局值。像这样:
if request.is_ajax():
TEMPLATE_BASE = 'ajax_base.html'
else:
TEMPLATE_BASE = 'base.html'
然后我正常设置渲染参数:
return render(request, 'home.html', {'posts': posts})
在 home.html
文件中我想要这个:
{% extends TEMPLATE_BASE %}
我可以这样做吗?
地点和方式?
这听起来正是 context processor 适合做的事情。
使用以下两行函数创建 myapp/context_processors.py
文件:
def template_base(request):
template = 'ajax_base.html' if request.is_ajax() else 'base.html'
return {'TEMPLATE_BASE': template}
并将此 context processor 添加到 TEMPLATE_CONTEXT_PROCESSORS
设置:
TEMPLATE_CONTEXT_PROCESSORS = (
...
"myapp.context_processors.template_base",
)
现在您可以在模板中编写 {% extends TEMPLATE_BASE %}
。
我有一个网站使用 ajax 内容加载来加载页面内容。对于所有页面,我检查是否为 ajax 的请求:
if request.is_ajax():
return render(request, 'home.html', {'posts': posts,
'base_theme': 'ajax_base.html',
})
else:
return render(request, 'home.html', {'posts': posts,
'base_theme': 'base.html'
})
我必须在所有操作中设置 base_theme,我必须在模板中再次设置:
{% extends base_theme %}
我如何在自动检查请求并为其设置值的地方设置请求的全局值。像这样:
if request.is_ajax():
TEMPLATE_BASE = 'ajax_base.html'
else:
TEMPLATE_BASE = 'base.html'
然后我正常设置渲染参数:
return render(request, 'home.html', {'posts': posts})
在 home.html
文件中我想要这个:
{% extends TEMPLATE_BASE %}
我可以这样做吗? 地点和方式?
这听起来正是 context processor 适合做的事情。
使用以下两行函数创建 myapp/context_processors.py
文件:
def template_base(request):
template = 'ajax_base.html' if request.is_ajax() else 'base.html'
return {'TEMPLATE_BASE': template}
并将此 context processor 添加到 TEMPLATE_CONTEXT_PROCESSORS
设置:
TEMPLATE_CONTEXT_PROCESSORS = (
...
"myapp.context_processors.template_base",
)
现在您可以在模板中编写 {% extends TEMPLATE_BASE %}
。