【问题标题】:Is there a way in Django to mask link in navbar according to the loaded template?Django中有没有办法根据加载的模板屏蔽导航栏中的链接?
【发布时间】:2022-09-27 16:42:34
【问题描述】:

我想在 Django 中做一件简单的事情,但找不到 \"Django\" 方法,我确信有一个。

假设我有一个简单的导航栏,如下所示:

<ul>
    <li>
        <a href=\"{% url \'home-index\' %}\">Home</a>
    </li>
    <li>
        <a href=\"{% url \'blog-index\' %}\">Blog</a>
    </li>
</ul>

当我在 \'blog-index\' 网址时,我想在导航栏中隐藏这个特定链接。

谢谢你的帮助

  • 您可以使用 @nigel239 方式( request.path )。或者也将变量传递给视图上下文字典。和 {% if variable == \'index\' %} (不显示按钮) {% endif %}

标签: django django-templates


【解决方案1】:

您可以在模板中查看request.path

{% if request.path == "your_url" %}
    (dont show button)
{% endif %}

例如,您可以使用 if 语句将样式设置为隐藏。

如果您想使用动态 URL,我使用模板标签:

# Put your navbar items in another HTML template.
@register.inclusion_tag('navbar.html', takes_context=True)
def navbar_tag(context):
    request = context['request']
    url_one = reverse('blog:your-index')
    url_two = reverse('blog:blog') # You get the gist.
    return {
        "urls":{
            "url_one":url_one,
            "url_two":url_two,
        }
    }

然后在您的模板标签 HTML 模板中,您可以使用:

{% if request.path != urls.url_one %}

在您的普通模板中,您首先加载标签,然后可以将其放在导航栏项目的位置,如下所示:

{% load your_tag_library %}

{% navbar_tag %}

【讨论】:

  • 好,谢谢。像这样的东西正在工作:{% if request.path != '/blog/articles/' %} 有没有办法通过这个解决方案来使用动态 url,因为它在我的 urls.py 中。 path("articles/", PostList.as_view(), name="blog-index"), 我的意思是使用 blog-index 进行 request.path 检查而不是 your_url
  • 您可以制作一个上下文处理器,或将您的导航项目放在模板标签内。我将为后者编辑我的答案。
猜你喜欢
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2021-10-01
  • 2018-01-05
相关资源
最近更新 更多