链接`if`和`url`模板标签

时间:2015-07-24 08:12:40

标签: python django django-templates templatetags

我有一个django页面,其中包含导航栏中的登录表单(用于从主页快速登录)和单独的登录页面(如果输入错误,用户将被重定向到该页面)。

我的模板结构是这样的,我有一个-1模板和一个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 %}字符串,因为即使我更改URLConf,这也允许字符串仍然正确。但是,我不能简单地写

'accounts/login'

我认为最好的方法是以某种方式将上下文变量设置为{% if url 'auth_login' in request.get_full_path %} 的值,但是如何尽可能干净地完成?

1 个答案:

答案 0 :(得分:1)

在您的基本表单中,您只需在导航中添加一个块,即允许页面包含额外的导航项

 {% block extra_nav %}{% endblock %}

然后在您的登录页面中,您可以包含登录表单

 {% block extra_nav %}{% include 'login_form' %}{% endblock %}    

虽然这很快就会变得混乱。

或者,您包含一个额外的数据参数,您只需要在需要显示它的页面中传递

 { 'show_login': True }


{% if show_login %}
     ... your form
{% endif %}

因为如果不存在,这将等于假,它将不会显示在未包括

的区域中