比较 Django 模板中的 url
Compare urls in Django Template
在 django 模板中,如果 url/path 是特定元素,我不想显示某些元素。伪:
{% if not url = account:detail %}
我们可以在这里分两步完成:
- 首先我们求出url,然后赋给一个变量(这里是
url2
);和
- 接下来比较urls
所以:
{% url account:detail <b>as url2</b> %}
{% if url != url2 %}
<!-- ... (do something) ... -->
{% endif %}
但是请注意,如果两个 url 在语法上不同(例如 yourdomain.com/foo
和 /foo
),那么它们 本身 指向不同的东西。
如果你想访问 current 路径,你可以 - 正如@RajaSimon 所说,通常使用 request.path
(假设你使用 [=14 渲染模板=]、render(..)
或另一种传递 request
对象的方法)。
您可以在 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 %}
在 django 模板中,如果 url/path 是特定元素,我不想显示某些元素。伪:
{% if not url = account:detail %}
我们可以在这里分两步完成:
- 首先我们求出url,然后赋给一个变量(这里是
url2
);和 - 接下来比较urls
所以:
{% url account:detail <b>as url2</b> %}
{% if url != url2 %}
<!-- ... (do something) ... -->
{% endif %}
但是请注意,如果两个 url 在语法上不同(例如 yourdomain.com/foo
和 /foo
),那么它们 本身 指向不同的东西。
如果你想访问 current 路径,你可以 - 正如@RajaSimon 所说,通常使用 request.path
(假设你使用 [=14 渲染模板=]、render(..)
或另一种传递 request
对象的方法)。
您可以在 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 %}