链接 `if` 和 `url` 模板标签
Chaining `if` and `url` template tags
我有一个 Django 页面,它在导航栏中包含一个登录表单(用于从主页快速登录)和一个单独的登录页面(如果用户输入错误,则会重定向到该页面)。
我的模板结构是这样的,我有一个 base.html
模板和一个 navbar.html
模板。我的所有页面都扩展了 base.html
模板(毕竟,这就是它的用途,对吧?),然后大多数(但不是所有)页面都包含 navbar.html
模板。我在下面粘贴的代码来自 navbar
模板。
我知道这可以做得更优雅,但我的问题更笼统,这只是一个用例。我想要做的是,在导航栏中,如果当前显示的站点不是登录站点,则只显示登录表单。目前,我有
{% if not 'accounts/login' in request.get_full_path %}
<form class="navbar-form navbar-right" action="{% url 'auth_login' %}" method="POST">
{% csrf_token %}
<div class="form-group">
<input class="form-control" name="username" type="text" placeholder="Username">
</div>
<div class="form-group">
<input class="form-control" name="password" type="password" placeholder="Password">
</div>
<button class="btn btn-default" type="submit">Log in</button>
</form>
{% endif %}
效果很好。但是,我不喜欢 'accounts/login'
是硬编码的。通常,我被告知最好的做法是使用 {% url 'auth_login %}
来获取 'accounts/login'
字符串,因为即使我更改了 URLConf,该字符串仍然是正确的。但是,我不能简单地写
{% if url 'auth_login' in request.get_full_path %}
我认为最好的办法是以某种方式将上下文变量设置为 {% url 'auth_login' %}
的值,但如何才能尽可能干净利落地做到这一点?
在您的基本表单中,您只需向导航添加一个块,允许页面包含额外的导航项
{% block extra_nav %}{% endblock %}
然后在您的登录页面中,您可以包含登录表单
{% block extra_nav %}{% include 'login_form' %}{% endblock %}
虽然这很快就会变得混乱。
或者,您包含一个额外的数据参数,您只在需要显示它的页面中传递该参数
{ 'show_login': True }
{% if show_login %}
... your form
{% endif %}
如果不存在,这将等同于 false,因此它不会显示在未包含的区域
我有一个 Django 页面,它在导航栏中包含一个登录表单(用于从主页快速登录)和一个单独的登录页面(如果用户输入错误,则会重定向到该页面)。
我的模板结构是这样的,我有一个 base.html
模板和一个 navbar.html
模板。我的所有页面都扩展了 base.html
模板(毕竟,这就是它的用途,对吧?),然后大多数(但不是所有)页面都包含 navbar.html
模板。我在下面粘贴的代码来自 navbar
模板。
我知道这可以做得更优雅,但我的问题更笼统,这只是一个用例。我想要做的是,在导航栏中,如果当前显示的站点不是登录站点,则只显示登录表单。目前,我有
{% if not 'accounts/login' in request.get_full_path %}
<form class="navbar-form navbar-right" action="{% url 'auth_login' %}" method="POST">
{% csrf_token %}
<div class="form-group">
<input class="form-control" name="username" type="text" placeholder="Username">
</div>
<div class="form-group">
<input class="form-control" name="password" type="password" placeholder="Password">
</div>
<button class="btn btn-default" type="submit">Log in</button>
</form>
{% endif %}
效果很好。但是,我不喜欢 'accounts/login'
是硬编码的。通常,我被告知最好的做法是使用 {% url 'auth_login %}
来获取 'accounts/login'
字符串,因为即使我更改了 URLConf,该字符串仍然是正确的。但是,我不能简单地写
{% if url 'auth_login' in request.get_full_path %}
我认为最好的办法是以某种方式将上下文变量设置为 {% url 'auth_login' %}
的值,但如何才能尽可能干净利落地做到这一点?
在您的基本表单中,您只需向导航添加一个块,允许页面包含额外的导航项
{% block extra_nav %}{% endblock %}
然后在您的登录页面中,您可以包含登录表单
{% block extra_nav %}{% include 'login_form' %}{% endblock %}
虽然这很快就会变得混乱。
或者,您包含一个额外的数据参数,您只在需要显示它的页面中传递该参数
{ 'show_login': True }
{% if show_login %}
... your form
{% endif %}
如果不存在,这将等同于 false,因此它不会显示在未包含的区域