检查url是否与模板匹配

时间:2011-06-20 07:00:33

标签: django django-templates

是否可以在模板中检查某个网址与网址中的任何模式匹配?

4 个答案:

答案 0 :(得分:7)

您可以使用url标记的“as”形式来检查命名的URL是否存在。

{% url path.to.view as the_url %}
{% if the_url %}
  <a href="{{ the_url }}">Link to optional stuff</a>
{% endif %}

当使用“as”时,它不会引发异常。

答案 1 :(得分:6)

这是您通常希望在views.py文件中执行的操作,其中reverse()帮助程序用于具有已知args的命名URL或用于路径的resolve()。

如果您确实需要特定模板中的此功能,这是一个hacky解决方案:

@register.simple_tag
def urlpath_exists(name):
    """Returns True for successful resolves()'s."""
    try:
        return bool(resolve(path))
    except Resolver404:
        return False

注意:这并不保证网址有效,只是模式匹配。

答案 2 :(得分:1)

假设您的项目名称是虚拟的。然后,

from dummy.urls import urlpatterns
def find_url(url):
  for e in urlpatterns:
    if e.regex.match(url):
      print 'found!'  #or do whatever you want
      return          #then exit the procedure.
  print 'not found!'

答案 3 :(得分:0)

我认为没有简单的方法可以做到这一点。所以我写了一个简单的模板标签,它接受url名称并为它调用reverse方法并将反向放入try..except:

try:
    result = reverse(url)
except:
    result = None
return result