如何检查模板上的路由?

问题描述

有人知道如何检查使用django模板语言通过网址路由访问的模板吗?

这是我的情况:这里有模板article.html,它显示了通过blog-home网址路径访问时博客的所有帖子,并且还仅显示了通过{{1}的给定用户的帖子}网址路由。

此模板的工作方式与之类似,因为定义将显示哪些帖子的是views.py中的类。

话虽如此,这就是我试图做的事情:(我知道它的错

user-posts

如果有的话,写这个 if 语句的正确方法是什么?

解决方法

您应该创建一个custom templatetag

my_app / templatetags / utils.py

from django import template

register = template.Library()


@register.simple_tag(takes_context=True)
def is_active_view(context,*view_names):
    request = context.get('request')
    for view_name in view_names:
        if getattr(request.resolver_match,'view_name',False) and request.resolver_match.view_name == view_name:
            return True
    return ''

并以这种方式在模板中使用它,假设blog-home是您为您的网址指定的网址名称:

blog-home.html

{% load utils %}

{% is_active_view 'blog-home' as display_blog_home_section %}

{% if display_blog_home_section %}
<!-- Your code -->

{% endif %}

NB:此模板标记可以一次检查多个视图名称,并支持命名空间url:

{% is_active_view 'front:blog-home' 'front:blog-categories' as display %}
,

当Django匹配url模式时,会创建一个ResolverMatch对象,并在request.resolver_match的请求对象上使该对象可用。可以在模板中查询此ResolverMatch对象以实现所需的内容,url_name属性是匹配的url模式的名称

{% if request.resolver_match.url_name == 'user-posts' %}
,

如果您使用boostrap并尝试在该URL上使菜单选项处于“活动”状态,则这是此版本的优化版本

from django import template

register = template.Library()

@register.simple_tag(takes_context=True)
def is_active_tab(context,'') == view_name:
            return 'active'
    return ''

您可以像使用它

                    <li class="nav-item {% is_active_tab 'games:list' %}">
                        <a class="nav-link" href="{% url 'games:list' %}">
                            {% translate "My Quizzes" %}
                        </a>
                    </li>
                    <li class="nav-item {% is_active_tab 'games:create' %}">
                        <a class="nav-link" href="{% url 'games:create' %}">
                            {% translate "New Game" %}
                        </a>
                    </li>

如果任何view_names与当前视图名称匹配,它将为元素的类添加一个额外的active类名称。使模板的文字更加简洁

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...