django 扩展了不同的基本模板

pdx*_*ile 3 django django-templates django-authentication django-registration

我知道我们可以在模板中使用“扩展变量”在两个不同的扩展模板之间切换。例如

  views:
     if something:
         base = 'base1.html'
     else:
         base = 'base2.html'
     return render_to_response ('template.html', {'base':base})

  template.html:
     {% extends base %}
Run Code Online (Sandbox Code Playgroud)

通常情况下效果很好。但是,我的问题是我正在使用 django-registration,我不必编写自己的视图来处理注册和登录过程。这也意味着我无法将变量传递给模板。虽然我的项目目录下确实有注册模板。(如login.html)

不幸的是,Django 无法在模板中执行此操作:

   {% if something %}
     {% extends 'base1.html' %}
   {% else %}
     {% extends 'base2.html' %}
   {% endif %}
Run Code Online (Sandbox Code Playgroud)

我知道“变量基数”可以传递给身份验证登录的唯一方法是编写我自己的视图,例如登录、注销等。这似乎不适合 DRY 模型,而且今后很容易出错。

还有其他方法可以实现此目的吗?或者有任何解决问题的建议吗?

谢谢。

-P

小智 5

如果只有 2(或 3)个选项可以将“某物”转换为布尔值,那么您可以使用 yesno 过滤器: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#是的,没有

所以:

{% extends something|yesno:"base1.html,base2.html" %}
Run Code Online (Sandbox Code Playgroud)

如果您想要更自由的形式,那么您可以使用上面提到的额外上下文/自定义上下文处理器选项,并尝试如下操作:

{% extends selected_template|default:"base2.html" %}
Run Code Online (Sandbox Code Playgroud)

其中选定的模板只是您喜欢的任何基本模板的路径。