【问题标题】:Compare urls in Django Template比较 Django 模板中的 url
【发布时间】:2019-01-19 20:19:30
【问题描述】:

在 django 模板中,如果 url/path 是特定的,我不想显示某些元素。在伪中:

 {% if not url = account:detail %}

【问题讨论】:

    标签: django django-templates django-urls


    【解决方案1】:

    我们可以在这里分两步完成:

    1. 首先我们解析url,并将其分配给一个变量(这里是url2);和
    2. 接下来比较网址

    所以:

    {% url account:detail as url2 %}
    {% if url != url2 %}
        <!-- ... (do something) ... -->
    {% endif %}

    但是请注意,如果两个 url 在语法上不同(例如 yourdomain.com/foo/foo),它们本身指向不同的东西。

    如果您想访问 当前 路径,您可以 - 就像 @RajaSimon 所说,通常使用 request.path(假设您使用 RequestContextrender(..) 或其他渲染模板传递request 对象的方式)。

    【讨论】:

    • @user3541631:您的评论很混乱,能否请您重新阅读,并修正“语法”?
    • @user3541631 您可以使用request.path 获取当前页面网址,这就是您要问的吗?如果是这样,您的条件应该是{% if request.path != account_detail_url %}
    • @WillemVanOnsem - 我想检查当前 url/页面是否与预定义页面相同。我可以从 request.path 获得的当前页面/url。要将 request.path 与“account:detail”进行比较,我想我需要“resolve”,不是吗?但是我如何在模板中设置解析?
    • @user3541631:但是你在模板中解析,这里我们解析,路径存放在url2变量中。所以你可以比较{% if request.url != url2 %}
    • @user3541631 在模板中你可以使用url 内置模板来解析url
    【解决方案2】:

    您可以在 urls.py 文件中为您的网址命名( url_name ),然后您可以直接使用模板中的HttpRequest.resolver_match 对象进行比较。

    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('articles/<int:year>/', views.year_archive, name='news_year_archive'),
        # ...
    ]
    

    在模板中你比较喜欢,

    {% if request.resolver_match.url_name == "news_year_archive" %}
       ...your stuff
    {% endif %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      • 2012-05-03
      • 2018-09-25
      相关资源
      最近更新 更多