在 Django 中有条件地扩展模板
Conditionally extending a template in Django
我在 Django 站点上有一个下载页面,我想为登录和未登录的用户提供该页面。而不是 user_download.html 和 login_download.html,我想要一个有条件地扩展正确基础的 download.html。
但是,当我使用下面的代码时出现错误。
{% if user.is_authenticated %}
{% extends 'user_base.html' %}
{% else %}
{% extends 'login_base.html' %}
{% endif %}
{% block content %}
<h2>Downloadable content</h2>
...
{% endblock %}
我收到的错误是
/download/
处的 TemplateSyntaxError
无效的块标记:'else'
else 有什么问题吗?我试过了
{% if user.is_authenticated %}
{% extends 'user_base.html' %}
{% else %}{% if AnonymousUser.is_authenticated %}
{% extends 'login_base.html' %}
{% endif %}{% endif %}
{% block content %}
<h2>Downloadable content</h2>
...
{% endblock %}
但这也没有用。
谢谢,
埃里普
您收到错误消息,因为 extends
需要在模板顶部定义。 extends
控制模板继承:您基本上是从某个父 class 创建一个子 class,这就是为什么 extends
需要成为模板中的第一件事。
想象一下写一个 class,然后在 __init__()
你说了类似
的东西
class DoesntKnowWhereToInheritFrom(object):
def __init__():
if something:
self.inherits_from(x)
else
self.inherits_from(y)
compiler/interpreter 会吓坏。
执行您在此处尝试执行的操作的常用方法是检查 view
中的 is_authenticated
,然后呈现适当的模板。
{% extends %}
标签支持变量。请参阅 the doc 以供参考。
def my_view(request):
if request.user.is_authenicated
base_template_name = 'user_base.html'
else:
base_template_name = 'login_base.html'
# Pass base template name to the renderer
return render_to_response('your_template.html', {'base_template_name':base_template_name})
模板(请注意未引用该值):
{% extends base_template_name %}
...
我在 Django 站点上有一个下载页面,我想为登录和未登录的用户提供该页面。而不是 user_download.html 和 login_download.html,我想要一个有条件地扩展正确基础的 download.html。
但是,当我使用下面的代码时出现错误。
{% if user.is_authenticated %}
{% extends 'user_base.html' %}
{% else %}
{% extends 'login_base.html' %}
{% endif %}
{% block content %}
<h2>Downloadable content</h2>
...
{% endblock %}
我收到的错误是 /download/
处的 TemplateSyntaxError无效的块标记:'else'
else 有什么问题吗?我试过了
{% if user.is_authenticated %}
{% extends 'user_base.html' %}
{% else %}{% if AnonymousUser.is_authenticated %}
{% extends 'login_base.html' %}
{% endif %}{% endif %}
{% block content %}
<h2>Downloadable content</h2>
...
{% endblock %}
但这也没有用。
谢谢, 埃里普
您收到错误消息,因为 extends
需要在模板顶部定义。 extends
控制模板继承:您基本上是从某个父 class 创建一个子 class,这就是为什么 extends
需要成为模板中的第一件事。
想象一下写一个 class,然后在 __init__()
你说了类似
class DoesntKnowWhereToInheritFrom(object):
def __init__():
if something:
self.inherits_from(x)
else
self.inherits_from(y)
compiler/interpreter 会吓坏。
执行您在此处尝试执行的操作的常用方法是检查 view
中的 is_authenticated
,然后呈现适当的模板。
{% extends %}
标签支持变量。请参阅 the doc 以供参考。
def my_view(request):
if request.user.is_authenicated
base_template_name = 'user_base.html'
else:
base_template_name = 'login_base.html'
# Pass base template name to the renderer
return render_to_response('your_template.html', {'base_template_name':base_template_name})
模板(请注意未引用该值):
{% extends base_template_name %}
...