Django 动态获取视图 url 并检查其是不是为当前页面
Posted
技术标签:
【中文标题】Django 动态获取视图 url 并检查其是不是为当前页面【英文标题】:Django dynamically get view url and check if its the current pageDjango 动态获取视图 url 并检查其是否为当前页面 【发布时间】:2014-03-29 15:03:08 【问题描述】:考虑一下这个基本菜单:
<ul class="nav navbar-nav">
<li class="active"><a href="% url 'home' %">Home</a></li>
<li><a href="% url 'about' %">About</a></li>
</ul>
我正在尝试为当前页面的链接提供一个活动类,并且我想根据当前 url 和视图的 url 动态地执行此操作。这样当用户访问 about 页面时,该页面现在具有活动类,而主页没有。
我想在<li></li>
标签内进行这样的逻辑工作:
% if request.get_full_path = "% url 'home' %" %class="active"% endif %
% if request.get_full_path = "% url 'about' %" %class="active"% endif %
但显然我不能让两个 % ... %
相互嵌套。
关于如何避免将两者嵌套的任何想法?
【问题讨论】:
不是简单的request.get_full_path = url 'home'
工作吗?
@njzk2 它给出了Unused ''home'' at end of if expression
错误。可惜那会很好很整洁。
***.com/questions/340888/navigation-in-django 应该会有所帮助。
【参考方案1】:
如果您的应用有namespace
(比如说blog
),那么:
<li class="nav-item"><a class="nav-link% if request.resolver_match.namespace == 'blog' and request.resolver_match.url_name == 'post_list' % active% endif %" href="% url 'blog:post_list' %">Blog</a></li>
记得在blog/urls.py
中定义app_name
:
app_name = 'blog'
urlpatterns = [
path('', views.post_list, name='post_list'),
# ...
]
【讨论】:
【参考方案2】:非常古老的线程!我的回答可能会对未来的读者有所帮助。 我是这样做的(只需将请求 URL 名称与您的路径名进行比较)
<a class="nav-link % if request.resolver_match.url_name == 'index' %active% endif %" href="#">Home</a>
【讨论】:
【参考方案3】:我通常在导航中使用模板继承,类似于answer alecxe linked to。但是,可以在 if 标记中比较使用当前 URL,就像您尝试做的那样。
url
标签允许您将结果保存到变量中。然后,您可以在 if 标记中使用该变量。
% url 'home' as home_url %
<a href=" home_url " % if request.get_full_path == home_url %class="active"% endif %>Home</a>
【讨论】:
这种方法的另一个优点是,在创建指向它的链接时无论如何都需要home_url
,所以实际上唯一额外的就是request.get_full_path
上的if
。顺便说一句,为此,您需要将 request
添加到模板上下文变量中,当然您可以将其作为默认上下文变量。以上是关于Django 动态获取视图 url 并检查其是不是为当前页面的主要内容,如果未能解决你的问题,请参考以下文章
Django 应用程序视图 - 如何从 url 中的 django 数据库中获取条目并从数据库中获取更多视图信息?
Django:“如何在将 url() 传递给 MyClass.as_view() 之前从 url() 获取 slug?”或“如何检查注册是不是开放?”